Skip to main content

Full text of "MSX Technical Data Book"

See other formats


MSX Technical Data Book 

Hardware/Software Specifications 


Presented by 

Robey's MSX Workshop 

Originaly scanned by 

Ivan Latorre 

Converted to PDF 

Eduardo Robsy 


[September 2004] 





MSX Technical Data Book 

Hardware/Software Specifications 


SONY 



Sony Corporation 
4 14 1, Asahi-cho, Atsugi-shi, 
Kanagawa-ken, 243 Japan 


Copyright © 1984 Microsoft Corporation 
Produced by ASCII Corporation 


Printed in Japan 



PREFACE 


The Microsoft MSX standard was invented to provide end users 
and software developers with a standardized computer so that 
programs could run on any computer even though they were made by 
different manufacturers. 

This book presents the MSX specifications in detail. It is 
intended to be a reference for advanced programmers and software 
developers. The information is generally divided four parts. 

Part A, MSX HARDWARE SPECIFICATIONS, presents the specifications 
for the MSX system hardware. 

Chapter 1, Hardware Specification, covers the MSX standard 
hardware configuration in terms of the requirements for the LSIs, 
memory size, interrupts, screen, keyboard, and sound used in the 
main unit; and the various (cassette, floppy, printer, serial, and 
slot) interfaces and connectors. It also covers topics such as 
cartridges, expansion, ports, and memory maps. 

Part B, MSX SYSTEM SOFTWARE, contains a reference guide for MSX- 
BASIC and information for advanced programming. 

Chapter 2, Language Specification, is a guide to MSX-BASIC 
and is for use with advanced programming requiring machine lan¬ 
guage routines. 

Part C, EXPANDED MSX SYSTEM SOFTWARE, is about the advanced fea¬ 
tures of MSX, including Expanded Disk BASIC and MSX-DOS. 

Chapter 3, MSX-DOS, contains a user's guide to MSX-DOS and 
Disk BASIC, and includes information needed for the advanced 
programmer. 

Chapter 4, Other Expansion, covers the serial (RS-232C) ex¬ 
pansion and BIOS calls available in the extended version. 

Part D, SOFTWARE DEVELOPMENT GUIDE, contains information for soft¬ 
ware developers. 

Chapter 5, International MSX Versions and their Differences, 
is for manufacturers or programmers who wish to make the hardware 
or software be usable internationally. 

Chapter 6, Notes for MSX Software Developers, contains 
information that software developers should consider when 
programming for MSX computers. 


1 



Syntax Notation in Reference Sections 

Wherever the format for a statement/command or a function is given, 

the following rules apply: 

CAPS Items in capital letters must be input as shown. 

< > Items in lowercase letters enclosed in angle brackets (< >) 

are to be supplied by the user. 

[ ] Items in square brackets {[ ]) are optional. 

... Items followed by an ellipsis (...) may be repeated any 

number of times (up to the length of the line). 

{ } Braces indicate that the user has a choice between two or 
more entries. At least one of the entries enclosed in 
braces must be chosen unless the entries are also enclosed 
in square brackets. 

I Vertical bars separate the choices within braces. At least 

one of the entries separated by bars must be chosen unless 
the entries are also enclosed in square brackets. 

All punctuation except angle brackets and square 
brackets (i.e., commas, parentheses, semicolons, 
hyphens, equal signs) must be included where shown. 

Arguments to functions are always enclosed in parentheses. In the 

formats given for the functions in this book, the arguments are 

abbreviated as follows: 


X and Y 
I and J 
X$ and Y$ 


Represent any numeric expressions. 
Represent integer expressions. 
Represent string expressions. 


2 



CONTENTS 


PART A MSX HARDWARE SPECIFICATIONS 

1. Hardware Specifications 

1.1 MSX Standard.. 

1.2 MSX System Configuration.9 

1.3 Main Unit.10 

1.3.1 LSIs.. 

1.3.2 Memory .. 10 

1.3.3 Interrupts.11 

1.3.4 Screen. 12 

1.3.5 Keyboard .. 13 

1.3.6 Sound. .14 

1.4 Interfaces. 15 

1.4.1 Cassette Interface... 15 

1.4.2 Floppy Disk Interface .18 

1.4.3 Printer Interface .19 

1.4.4 RS-232C Interface. 20 

1.4.5 Peripheral I/O Port(s) .25 

1.4.6 Joysticks . 27 

1.4.7 Paddles. 28 

1.4.8 Connectors .29 

1.4.9 Slots. 30 

1.5 Cartridges. 31 

1.5.1 Cartridge Standard.31 

1.5.2 Cartridge Bus .32 

1.5.3 Cartridge Bus Connenction Conditions.34 

1.5.4 Cartridge Power Capacity . .....34 

1.5.5 Sample Circuit Diagram of Expanded Slot Select Signal35 

1.6 Notes for System Expansion.36 

1.6.1 RAM Expansion. ...36 

1.6.2 Slot Expansion...36 

1.6.3 I/O Expansion. 37 

1.7 Address Maps ..3 8 

1.7.1 Memory Map.3 8 

1.7.2 I/O Address Map.40 

1.7.3 Printer Port. 41 

1.7.4 VDP Port. 41 

1.7.5 PSG Port.. 

1.7.6 PPI Port. 41 

1.7.7 External Memory {SONY) . 41 

1.7.8 Light Pen (SANYO) .41 

1.7.9 Audio/Video Control .42 

1.7.10 Notes on I/O Address Assignments.42 

1.7.11 82 55 (PPI) Bit Assignments .. 43 

1.7.12 PSG Bit Assignments.44 

PART B MSX SYSTEM SOFTWARE 

2. Language Specifications 

2.1 MSX BASIC Reference Guide .46 

2.1.1 Modes of Operation. 46 


3 














































2.1.2 Line Format... 47 

2.1.3 Character Set . 47 

2.1.4 Constants.. 

2.1.5 Variables.. 

2.1.6 Type Conversion.51 

2.1.7 Expressions and Operators .53 

2.1.8 Program Editing . 57 

2.1.9 Special Keys.62 

2.1.10 Error Messages.63 

2.1.11 Commands and Statements except those doing I/O.63 

2.1.12 Functions except those doing I/O.7 9 

2.1.13 Device Specific Statements......84 

2.1.14 I/O Functions. 100 

2.1.15 Special Variables . 102 

2.1.16 Machine Dependent Statements and Functions .104 

2.1.17 Summary of Error Codes and Messages .105 

2.1.18 MSX BASIC Reserved words .109 

2.2 Advanced Programming Guide ...110 

2.2.1 BIOS Entry List . 110 

2.2.2 Work Area . 135 

2.2.3 Slot Control . 161 

2.2.4 Cassette I/O Mechanism .172 

2.2.5 MSX Printer Specifications .177 

PART C EXPANDED MSX SYSTEM SOFTWARE 
3. MSX-DOS 

3.1 MSX-DOS User's Guide .182 

3.1.1 System Requirements .182 

3.1.2 Getting Started. 182 

3.1.3 Wild Cards .184 

3.1.4 Illegal File Names .185 

3.1.5 Directories...186 

3.1.6 Types of MSX-DOS Commands . 186 

3.1.7 Command Options .187 

3.1.8 Information Common to All MSX-DOS Commands .188 

3.1.9 Batch Processing .189 

3.1.10 The AUTOEXEC.BAT File...190 

3.1.11 How to Create a Batch File.191 

3.1.12 Replaceable Parameters in .BAT File.192 

3.1.13 MSX-DOS Editing and Function Keys.194 

3.1.14 Instructions for Users with Single-drive Systems ...200 

3.1.15 Disk Errors .201 

3.2 MSX-DOS Command Guide . 202 

3.3 MSX Disk BASIC Reference Guide .219 

3.3.1 Commands and Statements.219 

3.3.2 Functions.246 

3.3.3 Error Codes and Error Messages .252 

3.4 MSX-DOS and Disk BASIC Boot Procedure.255 

3.5 MSX-DOS and Disk BASIC Disk Drivers.256 

3.6 MSX-DOS System Calls. ....267 


4 

















































4. Other Expansion 


4.1 MSX-RS23 2C Support.290 

4.1.1 Extended BASIC for RS-232C Communication.291 

4.1.2 Extended BIOS Calls Handling RS-232C.300 

4.2 Other MSX Extended BIOS Calls.309 

4.2.1 Extended BIOS Calls.309 

4.2.2 Extended BIOS Maker ID Number .313 

4.3 Tenkey Support on MSX.314 

PART D SOFTWARE DEVELOPMENT GUIDE 

5. International MSX Versions and their Differences 

5.1 Introduction. 316 

5.2 Keyboard.316 

5.2.1 Keyboard Hardware. 316 

5.2.2 Character Set.....317 

5.2.3 Keyboard Layout .319 

5.2.4 CAPS Lock .319 

5.2.5 DEAD-Key Functions. 331 

5.3 Screen Mode .333 

5.4 Other Differences among Versions . 334 

5.5 ID Bytes.335 

6. Notes for MSX Software Developers.336 


5 





















6 



PART A 


MSX HARDWARE SPECIFICATIONS 



MSX HARDWARE SPECIFICATIONS 


1* Hardware Specifications 

1.1 MSX Standard 
o CPU 

Z80A compatible 

o MEMORY 

ROM: 32K bytes (MSX system software) 

RAM: 16K bytes (Minimum) 

o SCREEN DISPLAY 

Text display: 32 x 24 (See Section 2.4) 

Graphics: 256 x 192 

Colors: 16 

o CASSETTE TAPE 

FSK format, 1200/2400 Baud 

o SOUND 

8 Octaves, 3 Voices 
o KEYBOARD VERSIONS 

Alphanumerics, Japanese, Graphics (Japanese) 
Alphanumerics, European, Graphics (International) 

O FLOPPY DISK DRIVES 

Hardware depends on the manufacturer 
Disk format MS-DOS-compatible 

o PRINTER * 

8 bit parallel 

O ROM CARTRIDGE AND I/O BUS 

Software cartridge and expansion BUS slots 

o JOYSTICKS * 

1 or 2 

o CHINESE CHARACTERS * 

At manufacturer's disgression 

The items with asterisks may not be provided in the basic 
system configuration. 


8 



MSX HARDWARE SPECIFICATIONS 
1.2 MSX System Configuration 


o MINIMUM CONFIGURATION 
SOUND OUTPUT 

VIDEO OUTPUT 



ROM 32K 
RAM 16K 
PPI 


KEYBOARD 


CARTRIDGE SLOT x 1 



CASSETTE 


JOYSTICK 
x 1 


o SOFTWARE SUPPORT LIMIT 

SOUND OUTPUT 

VIDEO PRINTER 
OUTPUT OUTPUT 



CARTRIDGE 
SLOTS x 15 


Z80 A 

ROM 

32K 

PSG 

PPI 


VDP 



RAM 32K 

for 

BASIC 

64K 

for 

DOS 


KEYBOARD 




CASSETTE 


JOYSTICK 
x 2 









MSX HARDWARE SPECIFICATIONS 


1.3 Main Unit 


1.3.1 LSIs 


o CPU 

Z80A compatible 

Clock 3.579545MHz (NTSC Color sub-carrier frequency) 
1 WAIT in Ml CYCLE 

O VDP 

TI TMS-9918A compatible 

o PSG 

GI AY-3-8910 compatible 

o PPI 

Intel i-8255 compatible 


1.3.2 

Memory 


O ROM 

MSX-BASIC, 

3 2K bytes 

o RAM 

Minimum 16K 

bytes 


NOTE 

Since the minimum system 
configuration contains four 
slots, the memory area may be 
expanded up to 256K bytes. 
Each slot can be further 
expanded to have four slots, 
for a total of 16 slots. Thus 
the maximum memory space is 1 
megabyte. 

The BASIC ROM interpreter 
occupies addresses 0000 to 
7FFF, and the RAM addresses 
start at FFFF and grows down¬ 
ward on the memory map. 

See the memory map in Section 
1.7 for details. 


10 



MSX HARDWARE SPECIFICATIONS 


1.3.3 Interrupts 
o NMI 

Not used. MSX ROM only provides a RAM hook. 

o INT 

Interrupts are accepted from the VDP and the cartridges. 
The interrupt mode is 1. (Branch to 38H) The MSX system 
software uses an interrupt from the VDP. The interrupt 
intervals are 60 Hz in the NTSC version and 50 Hz in the 
PAL/SECAM version. 



It is not possible to support 
NMI under MSX-DOS because the 
address 66H (an entry vector 
for the NMI) is used by the 
MSX-DOS FCB data. 


11 



MSX HARDWARE SPECIFICATIONS 


1.3.4 Screen 
o LSI 

TI TMS9918A Compatible 
o Character set 

Alphanumerics + Japanese (European) + Graphics 
256 patterns, 8x8 dots 

o Col or 

16 colors 
o Sprites 

32 sprites, with a maximum of four sprites on the same 
horizontal line. 

o Display modes 


MODE 


RES. 


SIZE 


NO. I 

* I COLOR 


SPRITE 

AVAIL. 


NO. OF I 
CHARS. I 


I LSI 
Graphic I Spec. 

|-—- 

I fSuggested 
I value 


256 
xl92 

-H 

240 
x!92 


8x8 


I 16 

256 I colors 
I 


Yes 


I 

32x241 

--i 

I 

29X241 


I LSI 
Graphic I Spec. 


256 

xl92 


II iSuggested 
I value 


4 8x8 


240 

xl92 


I 16 

7681 colors 
I 


Yes 


32x24! 


29X241 


I LSI 
Multi-I Spec. 

color t-- 

ISuggested 
I value 


64 

x48blk 

--I 

64 

x40blk 


4x4 

/Block 


! 16 
- I colors 
I 


Yes 


I 

32x241 


29x24! 


+- 


I LSI 
I Spec. 

Text v - 

I Suggested 
I value 


256 

xl92 


240 

xl93 


8x6 


I 

I 2 

256 I out of 
I 16 
I colors 


No 


I 


40x24 


39x241 

______ J 


* Number of patterns 


Suggested 
val ues 


The eight pixels from the left and right of the 
horizontal line are not used by the software. 


12 





















MSX HARDWARE SPECIFICATIONS 


1.3.5 Keyboard 
o Layout 

Alphanumerics : ASCII standard 

Japanese syllables : JIS standard syllable layout 

European : International versions 

Graphic Characters : Depending on international version 

(Selected by jumper connection) 

o Scanning 

Software scanning driven by VDP interrupt 

o Number of keys 
72 


See section 5.2.2/5.2.3 for details, 
o Matrix diagram 



★ Underscore character. 

*★ Code Lock key in international versions. 


13 





MSX HARDWARE SPECIFICATIONS 


1.3.6 Sound 


0 LSI 

GI AY-3-8910 Compatible. Clock 1.7 8977 25 MHz (1/2 CPU clock) 

o OCTAVES 

8 Octaves (3 Voices) 

O SOUND EFFECTS 
Available 


O SOFTWARE SOUND OUTPUT 

1 bit from output port 


o OUTPUT LEVEL 

-5dbm (Providing the system has an output connector) 
o CONNECTOR 

RCA 2 pins (Providing the system has an output connector) 


14 



MSX HARDWARE SPECIFICATIONS 


1.4 Interfaces 


1.4.1 Cassette Interface 
o INPUT 


From the earphone 

terminal 

of 

the 

tape 

recorder 

o OUTPUT 

To the microphone 

terminal 

of 

the 

tape 

recorder 


o SYNCHRONIZATION 

Asynchronous, software-controlled 


o BAUD RATES 

1200 baud (1200Hz - 1 wave "0", 2400Hz - 2 waves 

”1") (Default) 

2400 baud (2400Hz - 1 wave "0", 4800Hz - 2 waves 

”1"), software-selected 

(The tape recorder to be used may have to be speci¬ 
fied by the manufacturer when using 2400 baud) 

o MODULATION 

FSK (Frequency Shift Keying), software-controlled 
O DEMODULATION 

Software-controlled. The system software automatically 
detects the baud rate upon receiving the data. 

O MOTOR CONTROL 

Available 

o CONNECTOR 

DIN 45326 (8 pins) 


15 



MSX HARDWARE SPECIFICATIONS 


O TABLE OF SIGNAL PINS 


1 PIN 

1 NO. 

[ SIGNAL 

1 NAME 

1 1 
[DIRECTION 1 

PIN CONNECTION 

i 

i 


| 

1 1 


i 

! 1 

1 

1 GND 

\ 1 


i 

i 

1 2 

i 

t GND 

I 1 


i 

i 

i 

. 

L 

1 "l 

1 1 

__ 


1 3 

1 

1 GND 

1 1 


i 

i 

i 4 

l- 

1 5 

i 

1 CMTOUT 

—f- 

1 

1 CMTIN 

+ i 

l i 

1 OUTPUT 1 

-H-H 

1 1 

f INPUT 1 

/ ® ® \ 

\ © ® I 

© y 

i 

i 

i 

i 

i 

i 

1 6 

1 

1 REMOTE + 

1 1 

1 OUTPUT 1 


i 

i 

i 

1 7 

1 

1 REMOTE - 

1 1 

1 OUTPUT [ 


i 

i 

i 

1 8 

1 

1 GND 

1 1 


i 

i 


16 












MSX HARDWARE SPECIFICATIONS 


o SAVE Level 

The constants in the SAVE circuit should be adjusted so as to 
perform the output level as follows: 

Output level -45 dBm ± 5 dBm (0 dBm = 0.775 V) 

The output should be 22 mVp-p ~ 7 mVp-p at 1200 Hz input signal. 



o Sample Circuit for SAVE 
, c -j|- 


4.7k Q 

Standard Value (*) 




Output to CMT 


4.7kfl 
0.022^F I lOOfl 


iw ifrr 


o Frequency Characteristics 



Lower Cutoff Frequency (*) Higher Cutoff Frequency 


* Note that the lower cutoff capacitor is to protect the IC of MSX. 
Cassette tape recorders themselves will not be harmed even if 
it is not there. The capacitance may be in the range 0.1 ~ 2.2//F. 
Adjust the capacitor to limit the lower cutoff frequency in the 
range 16 “ 200Hz, if the output inpedance of the IC is too high. 


17 








MSX HARDWARE SPECIFICATIONS 


1.4.2 Floppy Disk Interface 

o The Floppy Disk Interface contains 16K bytes of ROM beginning 
at 4000H that includes the following modules: 

* MSX-DOS KERNEL 

* MSX DISK BASIC 

* PHYSICAL DISK I/O DRIVER (Supplied by manufacturer) 

o The hardware interface is not specified. The physical disk 

I/O driver supplied by the manufacturer should resolve the 
hardware differences. 

o Ideally, the mechanism in the disk drive should detect that the 
drive door has been opened. This reduces the number of disk 


accesses required to 

Floppy disk format: 

check if the system 

MS-DOS compatible 

disk 

been replaced. 

8-inch 

Single-density 

128 

Bytes/Sector 

8-inch 

Double-density 

1024 

Bytes/Sector 

5.25-inch 

Double-density 

512 

Bytes/Sector 

3.5-inch 

CFD 

512 

Bytes/Sector 

3-inch 

CFD 

512 

Bytes/Sector 


18 



MSX HARDWARE SPECIFICATIONS 

1.4.3 Printer Interface 
o SPECIFICATIONS 

8 bit parallel, handshakes by BUSY and STROBE 

o LEVEL 

TTL 

O CHARACTER CODES 

Same as the MSX display codes 

O CONNECTOR 

14-pin AMP compatible 

o LIST OF PINS 



19 



















MSX HARDWARE SPECIFICATIONS 


1.4.4 RS-232C Interface 

O LSI COMPONENTS 

i-8251 Communications Interface 
i-8253 Programmable Interval Timer 

At least 4K bytes of ROM is required for software support. 


o PORT ADDRESSES 

80H R/W 8251 Data Port 

81H R/W 8251 Command/Status Port 

82H R Status Sense Port for CTS, Timer/Counter 2, RI, and CD 

82H W Interrupt Mask Register 

83H Reserved 

84H R/W 8253 Counter 0 

85H R/W 8253 Counter 1 

86H R/W 8253 Counter 2 

87H W 8253 Mode Register 


* The port at address 83H is reserved for use by the manufacturer. 


20 



MSX HARDWARE SPECIFICATIONS 


o USING THE PORT AT ADDRESS 82H 
82H Read: Get System Status 


r— 

L_ 

Data 

Bit 

i 

1 

Description 

1 

1 


D7 

i 

CTS (Clear To Send) 

- —-1 

1 



1 

0: CTS Asserted 

1 



1 

1: CTS Negated 

1 


D6 

1 

Timer/Counter Output-2 

from i8253 1 


D5 


"“1 

1 


D4 

1 

1 

1 


D3 

1 

1 Reserved 

1 


D2 


.... J 

1 


D1 

1 + 

RI (Ring Indicator) 

1 



1 

0: RI Asserted 

1 



t 

1: RI Negated 

1 


DO 

1 + 

CD (Carrier Detect) 

1 



1 

0: CD Asserted 

1 



1 

1: CD Negated 

1 

l _ 


_ _ 




NOTE: The signals with the plus (+) sign are optional. 
If only one signal is chosen, it must be 1 CD'. 


NOTE 

The CTS signal is sensed through the port 
instead of through the 8251 because of a 
problem in the CTS logic in some versions 
of the 8251. Software handling is thus 
made possible. 


21 









MSX HARDWARE SPECIFICATIONS 


82H Write: Interrupt Mask Register 


Data 

Bit 


Description 


D7 

D6 

D5 

D4 

D3 


D2 


D1 


DO 


I 

I Reserved 

_J 

Timer Interrupt from i8253 channel-2 
1: Mask Interrupt (Initial value) 
0; Enable Interrupt 
Sync character detect/Break detect 
1: Mask Interrupt (Initial value) 
0: Enable Interrupt 
Transmit Data Ready (Tx Ready) 

1: Mask Interrupt (Initial value) 
0: Enable Interrupt 
Receive Data Ready (Rx Ready) 

1: Mask Interrupt (initial value) 
0: Enable Interrupt 


NOTE: The signals above with the plus (+) sign are optional. 

The minimum requirement for the interrupt signal is 
thus Rx Ready. 


22 









MSX HARDWARE SPECIFICATIONS 


o USING THE 8253 TO GENERATE BAUD RATE CLOCK FOR THE 8251 


A. CRYSTAL FREQUENCY 

The crystal frequency is 1.8432 MHz. 


I----, 

I Baud rate (Baud) I Scale Factor and Error (xl6) I 


b - 


--(- 


— 


-1 


50 

1 

2304 



1 


75 

1 

1536 



1 


110 

1 

10 47 

110.0287 

+0.3% 

1 


150 

1 

768 



1 


300 

1 

3 84 



1 


600 

1 

192 



1 


1200 

1 

96 



1 


1800 

1 

64 



1 


2000 

1 

58 

1986.2 

-0.7% 

1 


2400 

I 

48 



1 


3600 

1 

32 



1 


4800 

1 

24 



1 


7200 

1 

16 



1 


9600 

1 

12 



1 


19200 

1 

6 



1 



_ ■ _ 




_j 


B. USING THE COUNTER CHANNEL 

CHO: Rx Baud rate clock 
CHI: Tx Baud rate clock 

CH2: Used by application (Interrupt generated optionally) 


23 









MSX HARDWARE SPECIFICATIONS 


o PINS OF DB25 CONNECTOR 


r- 

i 

h- 

Pin 

1 Signal 

I 

■ 

Pin 

1 

Signal 


1 

1 Frame Ground 


1 

14 

1 



2 

1 Transmit Data 



15 

I 



3 

1 Receive Data 



16 

I 



4 

i Request To Send 



17 

1 



5 

1 Clear To Send 



18 

1 



6 

1 Data Set Ready 



19 

1 



7 

1 Signal Ground 



20 

1 Data 

Terminal Ready 


8 

1 Carrier Detect 



21 

1 



9 

1 



22 

1 Ring 

Indicator 


10 

1 



23 

1 



11 

1 



24 

1 



12 

1 



25 

1 



13 

1 




1 


I— 






, 



24 









MSX HARDWARE SPECIFICATIONS 


1.4.5 Peripheral I/O Port(s) (1 or 2)* 
o LSI 

AY-3-8910 compatible 

o I/O 

Input 4 bits, Output 1 bit, Bidirectional 2 bits per port 

o LOGIC 

Active high 

o LEVEL 

TTL 

o CONNECTOR 

9-pin AMP compatible 

o LIST OF PINS 


1 PIN 

1 NO. 

1 SIGNAL 
i NAME 

i 

1 DIRECTION 

r 

PIN CONNECTION 

1 

1 


1 

1 

i 


1 

1 1 

1 FWD 

1 Input 

i 


1 

1 

1 2 

1 

1 BACK 

1 

1 Input 

“t 

i 

i 


1 

1 

1 

| 

1 3 

1 

1 LEFT 

i 

1 Input 

i 

i 


1 

1 

1 

1 

1 4 

1 

1 RIGHT 

1 

1 Input 

i 

i 

\ (D (D ® ® ® 1 

\ © © ® ® 1 

1 

1 

1 

i 

1 5 

1 * 

1 + 5V 

1 

i 

i 

1 

1 

i 

1 6 

1 

1 TRG 1 

1 Input/ 

1 Output 

i 

i 

1 

1 

1 

1 


1 

1 " •*—*— 

1 

l 


1 

1 

1 7 

1 

1 TRG 2 

1 

1 Output 

l 

i 


i 

i 

1 8 

l 

1 OUTPUT 

1 

1 Output 

i 

i 


1 

1 

1 

1 


1 

1 

T 

1 


1 

1 

1 9 

1 

1 GND 

1 

1 

! 


1 

1 


* Current capacity: 50mA each 


25 












MSX HARDWARE SPECIFICATIONS 
o Circuit Diagram 



All resistors are 10k ohm typically. 


26 


OOOOOOOOOfc ooooooooo 







MSX HARDWARE SPECIFICATIONS 


1.4.6 Joysticks 

o There are two types of joysticks. 

Joystick Type A has one trigger button, or if there is more 
than one trigger button, the software cannot distinguish between 
them. 


Joystick Type B has two independent trigger buttons. 

The joysticks produced from now on should show which type they 
are and software that needs to have Type B should say so on the 
package. 

o Circuit Diagram 


AMP 

9PIN FWD 



Option as described above. 


27 



MSX HARDWARE SPECIFICATIONS 


1.4.7 Paddles 

o A trigger pulse is sent to the 8 pin of the peripheral I/O port 
every time the PDL function is called. The paddle circuit, 

triggers the monostable multivibrator with this pulse. A pulse 
of the length corresponding to the level of the volume is 
returned to the port. 

A maximum of 6 channels of paddles can be attached to each I/O 
port. 

Paddle timing diagram 


FWDl 


- # - 

ta-td- - 

- -r--—»- 

r = 10^s to 3ms 

Circuit diagram (for 1 channel) 



NOTE: The volume (or the capacitance) should be adjustable as to 

justify the function of the paddle. 


28 




MSX HARDWARE SPECIFICATIONS 
1.4.8 Connectors 



PIN CONNECTION 




















MSX HARDWARE SPECIFICATIONS 


1.4.9 Slots 
O CONCEPT OF SLOTS 

For computers having 64K bytes of memory, the concepts of 
slots and memory banking are nearly identical. The CPU can 
directly choose the cartridge by its slot number. 

The slot concept originated from a desire to support the maxi¬ 
mum amount of software. Using the slots, the software can be 
run, regardless of the number of physical slots available to 
the computer. 

o ADVANTAGES OF SLOT STRUCTURE 

In a common bus structure, when there is an even number of 
memory banks, the device select signal connected to the bus 
cannot distinguish between the different devices by using the 
same memory area. If this were to occur, the system would not 
only be unusable, but the hardware would quickly deteriorate. 
By using the slot select signal to choose the memory devices, 
the above problem is avoided, and programs that handle two or 
more devices having the same memory area are made possible. 
This is a favorable point, considering the system's flexibili¬ 
ty and expandability. 

o Circuit diagram 




RFSH 


SlTSlo 


SLTSL1 


SLTSL2 

STT5L3 


30 






MSX HARDWARE SPECIFICATIONS 


1.5 Cartridges 

1*5.1 Physical Cartridge Specifications 

o Physical dimension of the standard cartridge 


to 


/- 

o 

v/v 

| r~ -1 

n 


a-i 




Oo 

_ ; 



( - 

INSERT 

DIRECTION 


(FRONT) 

1 

7 


o , 

r_ i i 

t i 


l 

i 


i 

Vi_-1 


i 

_ ) 


109 


o Physical dimension of the expanded cartridge 



31 








MSX HARDWARE SPECIFICATIONS 


1.5.2 Cartridge Bus 
o LIST OF SIGNAL PINS 


r*“ ■ 


-1- 


— T- 

-r- 




— T— 

— —- 

■"! 


PIN 

1 


1 

* i 

PIN 

1 


1 

* 

1 


NO. 

1 

NAME 

1 

I/O 1 

NO. 

1 

NAME 

1 

I/O 

1 

i— 


-+— 


— H— 

— 


—i— 

— 

-+- 

— 

-4 


1 

1 

CS1 

i 

0 1 

2 

1 

CS2 

1 

0 

1 


3 

1 

CS12 

i 

0 1 

4 

1 

SLTSL 

1 

0 

1 


5 

1 

Reserved # 

i 

- 1 

6 

1 

RFSH 

1 

0 

1 


7 

1 

WAIT% 

i 

I 1 

8 

1 

INT% 

1 

I 

1 


9 

1 

Ml 

i 

0 1 

10 

1 

BUSDIR 

1 

I 

1 


11 

1 

IORQ 

i 

0 1 

12 

i 

MERQ 

I 

0 

1 


13 

1 

WR 

i 

0 1 

14 

1 

RD 

1 

0 

1 


15 

1 

RESET 

i 

0 1 

16 

1 

Reserved # 

1 

- 

1 


17 

t 

A9 

i 

0 i 

18 

1 

A15 

i 

0 

1 


19 

1 

All 

i 

0 1 

20 

1 

A10 

1 

0 

1 


21 

1 

A7 

i 

0 1 

22 

1 

A6 

1 

0 

1 


23 

1 

A12 

i 

0 i 

24 

1 

A8 

i 

0 

1 


25 

1 

A14 

i 

0 f 

26 

1 

A13 

! 

0 

1 


27 

1 

A1 

i 

0 I 

28 

1 

A0 

! 

0 

1 


29 

1 

A3 

i 

0 t 

30 

1 

A2 

1 

0 

1 


31 

1 

A5 

t 

0 1 

32 

1 

A4 

1 

0 

1 


33 

1 

D1 

i 

I/O 1 

34 

1 

DO 

1 

I/O 

1 


35 

1 

D3 

i 

I/O 1 

36 

1 

D2 

1 

I/O 

1 


37 

1 

D5 

i 

I/O 1 

38 

1 

D4 

1 

I/O 

1 


39 

1 

D7 

i 

I/O 1 

40 

1 

D6 

1 

I/O 

1 


41 

1 

GND 

i 

- 1 

42 

1 

CLOCK 

1 

O 

1 


43 

1 

GND 

i 

- 1 

44 

1 

SWl 

1 

- 

1 


45 

1 

+5V 

i 

- 1 

46 

1 

SW2 

1 

- 

1 


47 

1 

+5V 

i 

1 

48 

1 

+12V 

1 

- 

1 


49 

1 

SOUNDIN 

i 

I 1 

50 

1 

-12V 

1 

- 

1 



-X.. 



_ __1___ 

— 4— 


— 4— 


J 


* The Input/Output directions are relative to the main unit. 

# Do not use the Reserved PINs. 

% OPEN COLLECTOR output 


32 










MSX HARDWARE SPECIFICATIONS 


o LIST OF SIGNAL PINS 


1 PIN NO.1 

U- __ 

NAME 

1 DESCRIPTION 

1 1 

CS1 

ROM 4000 to 7FFF, selected signal 

1 2 

CS2 

ROM 8000 to BFFF, selected signal 

1 3 

CS12 

ROM 4000 to BFFF, selected signal 



(for 256K ROM) 

1 4 

SLTSL 

Slot select signal 

1 5 

Reserved 

Reserved for future expansion. Do 



not use this pin. 

1 6 

RFSH 

Refresh signal 

1 7 

WAIT 

Wait signal to CPU 

1 8 

INT 

Interrupt request signal 

1 9 

Ml 

Fetch cycle signal of CPU 

1 10 

BUSDIR 

This signal controls the direction 



of the external data bus buffer when 



the cartridge is selected. It 



is LOW when the data is sent by the 



cartridge. 

1 11 

IORQ 

I/O request signal 

l 12 

MERQ 

Memory request signal 

1 13 

WR 

Write signal 

1 14 

RD 

Read signal 

1 15 

RESET 

System reset signal 

1 16 

Reserved 

Reserved for future expansion. Do 



not use this pin. 

1 17 ~3 2 

A0~A15 

Address bus 

1 33"40 

D0~D7 

Data bus 

1 41 

GND 

Ground 

1 42 

CLOCK 

CPU clock, 3.57 9 MHz 

1 43 

GND 

Ground 

1 44, 46 

SW1, SW2 

Detect Insert/Remove for protection 

1 45, 47 

+5V 

+5V power supply 

1 48 

+12V 

+12V power supply 

1 49 

SOUNDIN 

Sound input (-5 dbm) 

l 50 

-12V 

-12V power supply 




NOTE 

The CS signals imply a memory 
request and a read signal. 
Thus they cannot be used as 
chip select for writable 
devices such as RAMs. 


33 










MSX HARDWARE SPECIFICATIONS 


1.5.3 Cartridge Bus Connection Conditions 
o FAN-IN, FAN-OUT (LS-TTL load) 

Data and Address bus 

Main unit 4 - 

Below 2 

(Fan-in) < 

Above slot 1 
(Fan-out) - > 

O CONTROL SIGNALS 

Above slot 2 I Below 2 

- > I - > 

(Fan-out) I (Fan-in) 


- » 

Above 5 

4 - 

Below 1 

- > 


o VOLTAGE LEVEL 
TTL level 

1.5.4 Cartridge Power Capacity 


+5V 

300 mA/slot 

+12V 

50 mA 

-12V 

50 mA 


Cartridge 

(Fan-out) 

(Fan-in) 


34 




MSX HARDWARE SPECIFICATIONS 


1.5.5 Sample Circuit Diagram of Expanded Slot Select Signal 


Expanded slot adapter 



(access to FFFF) ■ RD-SLTSEL 



Al * A « SLTSL 














MSX HARDWARE SPECIFICATIONS 


1.6 Notes for System Expansion 


1.6.1 RAM Expansion 

o Since MSX-BASIC needs a contiguous RAM area from 8000 to FFFF, 
the additional RAM should be added to the existing RAM so as 
to be contiguous. 

o Since the MSX-BASIC software requires only RAM from 8000 to 
FFFF, RAM installed from 0000 to 7FFF cannot be used by it. 

1.6.2 Slot Expansion 

o When slots are expanded, the expanded slots must be expanded 
from a primary slot. Primary slots are those slots managed by 
the slot select register provided in port A of the 8255. 
Thus, to select an expansion slot, first select the primary 
slot to which the expansion slot is connected, then select the 
desired slot. 

o The slots directly attached to the MSX computer itself must be 
primary slots. Because there are significant differences 
between the primary and secondary slots, there must be a clear 
indication of which kind of slot is placed in an expansion 
adapter. 

o The location of the slot select register for the additional 
slots is address FFFF of the primary slot. To make it 
possible to differentiate the register from ordinary RAM, take 
the complement of the output of the register. That is, when 
the register is read, the data is the complement of the value 
of the register. 

o A maximum of four cartridges can be connected to the cartridge 
bus. Therefore, buffers are necessary if the system is to 
support more than five slots. The BUSDIR signal controls the 
direction of those buffers. Devices placed in expansion slots 
that send signals to the CPU must also send the BUSDIR signal 
to change the direction of the expansion slots to the CPU. 
However, for memory accesses, it is possible to determine the 
direction of the bus by using the slot select signal sent to 
the primary slot, the memory request signal, and the read/ 
write signal. The direction of the buffer should thus be 
controlled around the buffer circuit; cartridges containing 
only ROM or RAM thus do not have to manage the BUSDIR signal, 
and expansion RAM cartridges do not have to be expensive. 

Cartridges containing devices to send signals to the CPU 
(those devices responding to the INP instruction or supplying 
an address in response to mode 2 interrupts) must force BUSDIR 
to the 'L' level when sending data to CPU. 


36 



MSX HARDWARE SPECIFICATIONS 


1.6.3 I/O Expansion 

o In Z-80 based system, it is common to place I/O devices in the 
I/O address space. Since the MSX system was designed to be 
flexible and expandable, it is possible to add I/O devices 
using cartridges that share the same address space. If this 
is the case, those devices will not be able to be accessed 
properly. 

To avoid the above situation, the I/O devices should be placed 
in the memory area because they will be managed by slot select 
logic and the memory cannot be accessed simultaneously when 
placed in different slots, since devices placed in the memory 
area cannot be accessed by software running in different 
slots. General devices such as the VDP must therefore be 
placed in the I/O address space. Note also that in some cases 
it is more economical to use the I/O address space, because 
only eight bits of address information have to be decoded. 

The MSX system specifications define the system device I/O 
address space to be addresses from 40 to FF. The addresses 
below 3F are left free. While other devices may use this 
address space, other manufacturers may use the same addresses 
for other purposes. Thus, we recommend that memory addresses 
be used instead of the I/O area. In later MSX versions it 
is possible that standard devices will use the unassigned 
(reserved) addresses. 


37 



MSX HARDWARE SPECIFICATIONS 


1.7 Address Maps 


1.7.1 Memory Map 


o The following is an example memory map. 


FFFF 


C000 


8000 


4000 


0000 

CPU 

Memory 

area 




f--^ 


RAM 


f-H 

I DISK 
Soft¬ 
ware I 
t--4 


t-1 


i-> 


f--I 


t-H 

I BASIC I 
I Expan I 
I sionl 
h-^ 


I—.- 1 


0 1 2* 3* 

System Cartridge 
slot slot 


o MSX BASIC uses the largest contiguous available RAM area 
installed from 8000 to FFFF for its system working RAM area. 
This RAM may be placed in any slot, including the expansion 
si ot s. 


o The slot select register, port A of the 8255, maps the physical 
memory space to the logical CPU memory space in 16K-byte units 
(pages). For example, the following value in the slot select 
register allocates pages 0 and 1 from slot 0, page 2 from slot 
2, and page 3 from slot 0. 

(MSB) 76 54 32 10 (LSB) 


1001101001001 

I I I I 

I I I *-— Allocate 

i j i-Allocate 

[ L - Allocate 

(.-Allocate 

The physical memory is always allocated to the same memory 
page in the CPU memory space. It is not possible to allocate 
it to a different page, as in allocating page 3 of slot 3 to 
page 0 of the CPU memory space. 


slot 0 for page 0 
slot 0 for page 1 
slot 2 for page 2 
slot 0 for page 3 


38 




























MSX HARDWARE SPECIFICATIONS 


o The minimum system must have two slots, one for the system, 
and the other for the cartridge. 


NOTE 

The meaning of "slot" does not 
imply that it must have a car¬ 
tridge connector; however, the 
cartridge slot must have the 
cartridge connector. 


39 



MSX HARDWARE SPECIFICATIONS 


1.7.2 I/O Address Map 


FF 

F8 

F7 

FO 

EO 

D8 

DO 

CO 

B8 

B5 

B4 

BO 

A8 

AO 

98 

90 

88 

80 

40 

00 


Audio/Video Control 


ROM for Chinese 
Characters 


Floppy Disk Controller 


Light Pen Interface 


Calendar Clock 


External Memory 


PPI (8255) 


PSG (AY-3-8910) 
VDP (9918A) 
Printer Interface 


—i 


RS-232C Interface 


Reserved 


Unspecified 


40 

























MSX HARDWARE SPECIFICATIONS 


1.7.3 Printer Port 


90H 

R 

Busy state: 

Bit 1 

90 H 

W 

Strobe output: 

Bit 0 

91H 

W 

Print data 


1.7.4 

VDP 

Port 


98H 

R/W 

Video RAM data 


99H 

R/W 

Command and status register 

1.7.5 

PSG 

Port 


AOH 

W 

Address latch 


A1H 

w 

Data write 


A2H 

R 

Data read 


1.7.6 

PPI 

Port 


A8H 

R/W 

Port A 


A9H 

R/W 

Port B 


AAH 

R/W 

Port C 


ABH 

R/W 

Mode register 



1.7.7 External Memory (Sony) 
BOH thruogh B3H 


1.7.8 Light Pen (Sanyo) 
B8H through BBH 


41 



MSX HARDWARE SPECIFICATIONS 


1.7.9 Audio/Video Control 


F7H W BIT4 - AV Control 

W BIT5 - Ym Control 

W BIT6 - Ys Control 

W BIT7 - Video select 


L - TV 
L - TV 
L - Super 
L - TV 


1.7.10 Notes on I/O Address Assignments 

o I/O addresses 40-FF are assigned for system use. The unused 
empty area is also reserved for system use. 

Although I/O addresses are defined above, the software must 
not access those devices directly using the above ports. All 
I/O accesses must be done using BIOS calls, in order to make 
the software independent of hardware differences. MSX 

manufacturers may change some of the hardware from the 
standard MSX system and maintain software compatibility by 
rewriting BIOS. The hardware differences would thus be trans¬ 
parent to the software. 

The only exception to the above is the access to the VDP. 
Locations 6 and 7 of the MSX system ROM contains the Read and 
Write addresses of the VDP register. Software that must 
access the VDP quickly may access the VDP directly by using 
the addresses stored in ROM. 

o Addresses 00 to 3F are free. Different devices using the same 
address must not be accessed simultaneously. in general, the 
I/O devices that are not defined here should be placed in the 
memory space as memory-mapped I/O. See section 1.6.3 for fur¬ 
ther details. 

% The FDC may be placed in the I/O area; however, it must have 
a mechanism to disable it, and it must be enabled only if the 
system does accesses to the FDC. This makes it possible for 
the system to have more than one FDC interface for handling 
different media types. 


42 



MSX HARDWARE SPECIFICATIONS 
1.7.11 8255 (PPI) Bit Assignments 


I PORT 


I 5 


SIGNAL 

NAME 


CSOL 

CSOH 


CS1L 

CS1H 


CS2L 

CS2H 


CS3L 


CS3H 


CASON 


CASW 


CAPS 


SOUND 


DESCRIPTION 


0000-3FFF Address slot select signal 


4000-7FFF Address slot select signal 


8000-BFFF Address slot select signal 


C000-FFFF Address slot select signal 


Keyboard return signal 


Keyboard scan signal 


Cassette control signal (L=ON) 


Cassette write signal 


CAPS lamp signal (L=ON) 


Software-controlled sound output 


43 














MSX HARDWARE SPECIFICATIONS 


1.7.12 PSG Bit Assignments 


r" 

i 

i. 

PORTI 

BIT 

1 

I/O 

1 

CONNECTOR PIN NO. 

1 

NOTES 












A 

t 

0 

1 


1 

J3-PIN 1 

#1 1 

FWD1 



1 


1 


1 

J4-PIN 1 * 

#2 1 

FWD2 



1 

1 

1 

I 

1 

J3-PIN 2 

#1 1 

BACK1 



1 


1 


1 

J4-PIN 2 * 

#2 1 

BACK2 



1 

2 

1 

N 

1 

J3-PIN 3 

#1 1 

LEFT1 



1 


1 


1 

J4-PIN 3 * 

#2 1 

LEFT2 



1 

3 

1 

P 

1 

J3-PIN 4 

#1 1 

RIGHT1 



1 


1 


1 

J4-PIN 4 * 

#2 1 

RIGHT2 



1 

4 

1 

U 

1 

J3-PIN 6 

#1 1 

TRGA1 



1 


1 


1 

J4-PIN 6 * 

#2 1 

TRGA2 



1 

5 

1 

T 

1 

J3-PIN 7 

#1 1 

TRGBl 



1 


1 


1 

J4-PIN 7 * 

#2 1 

TRGB2 



1 

6 

1 


1 

KEY LAYOUT Select 

#4 1 

Japanese 



1 


1 


1 


1 

version only 



1 

7 

1 


1 

CSAR 

1 




t 


1 


1 

(Cassette tape READ) 1 























B 

1 

0 

1 


1 

J3-PIN 6 

#3 1- 

- 



1 

1 

1 

0 

1 

J3-PIN 7 

#3 1 

1 "H" Level 



1 

2 

1 

0 

1 

J4-PIN 6 * 

#3 i 

1 



1 

3 

1 

T 

l 

J4-PIN 7 * 

#3 1- 

- 



1 

4 

1 

P 

1 

J3-PIN 8 

1 




1 

5 

1 

U 

1 

J4-PIN 8 * 

1 




1 

6 

1 

T 

1 

PORT A INPUT SELECT I 

Selects J3 or J4 



1 

7 

1 


t 

KLAMP 

1 

Japanese 



1 


1 


1 

(KANA LAMP L=ON) 

1 

version only 

L- 

_ 

_ j__ 

_ _ 

- J— 

__ 

_ _| _ 

. 

_i _ 



#1 Available if bit 6 of port B is LCW and is used by J0YSTICK1 
#2 Available if bit 6 of port B is HIGH and is used by J0YSTICK2 
#3 Set these pins to "H" when using them as an input port. 

Connect an open collector buffer to the output. 

#4 JIS layout - "H", syllable layout - "L" 

<Remark> PIN 5: +5V 

PIN 9: GND 

o On the minimum MSX system, there is no J4 connector. 


44 










PART B 

MSX SYSTEM SOFTWARE 



MSX BASIC REFERENCE GUIDE 


2. Language Specifications 


2.1 MSX-BASIC Reference Guide 

MSX-BASIC is an extended version of Microsoft Standard BASIC 
Version 4.5, and includes support for graphics, music, and various 
peripherals attached to MSX Personal Computers. Generally, MSX- 
BASIC is designed to follow GW-BASIC, which is one of the standard 
BASICS running on 16-bit computers. During the creation of MSX- 
BASIC, a major effort was made to make the system as flexible and 
expandable as possible. 

MSX-BASIC also features a BCD-arithmetic function with a double¬ 
precision accuracy of up to 14 digits. Arithmetic operations thus 
do not generate rounding errors that tend to confuse new program¬ 
mers. In addition, all trancendental functions are calculated 
with 14-digit accuracy. 16-bit, signed, integers are also availa¬ 
ble for faster execution. 


2.1.1 Modes of Operation 

When MSX-BASIC is initialized, it displays the "OK" prompt. 
"Ok" indicates MSX-BASIC is at command level; that is, it is ready 
to accept commands. At this point, MSX-BASIC may be used in 
either of two modes: direct mode or indirect mode. 

In the direct mode, MSX-BASIC statements and commands entered as 
they are without preceeding line numbers. They are executed imme¬ 
diately, and the results of arithmetic and logical operations may 
thus be determined quickly. While these results may also be 
stored for later use, the instructions themselves are lost after 
execution. Direct mode is thus useful for debugging and for using 
MSX-BASIC as a "calculator" for quick computations not requiring 
a complete program. 

The indirect mode is used for entering programs. Program lines are 
preceded by line numbers and are stored in memory. The program 
stored in memory is executed by entering the RUN command. 


46 



MSX BASIC REFERENCE GUIDE 


2.1.2 Line Format 

The program lines of MSX-BASIC programs must be in the following 
format. Square brackets denote statements that are optional. 

nnnnn BASIC statement[:BASIC statement...] <Carriage Return> 

An MSX-BASIC program line always begins with a line number and 
ends with a carriage return. A logical line may contain a maximum 
of 255 characters. More than one BASIC statement may be placed on 
a logical line, but the statements must be separated by a colon. 

The line numbers indicate the order in which the program lines 
will be stored in memory, and in MSX-BASIC, they must be between 0 
and 65529. They are also used as references during branching and 
editing. 

During editing, a period (.) may be used with the LIST, AUTO, and 
DELETE commands to refer to the current line. 


2.1.3 Character Set 


The MSX-BASIC character set consists of alphabetic characters, 
numeric characters, special characters, graphic characters, and 
both (Japanese) hiragana and katakana characters. See section 
5.2.2 for details. 


The alphabetic characters in MSX-BASIC are the uppercase and 
lowercase letters of the alphabet. 

The MSX-BASIC numeric characters are the digits 0 through 9. 

In addition, the following special characters are recognized by 
MSX-BASIC: 

Character Action 


Blank 

~ Equals sign or assignment symbol 

+ Plus sign 

Minus sign 

* Asterisk or multiplication symbol 

/ Slash or division symbol 

Up arrow or exponentiation symbol 

( Left parenthesis 

) Right parenthesis 

% Percent 

# Number (or pound) sign 

$ Dollar sign 

I Exclamation point 

[ Left bracket 

] Right bracket 

, Comma 

. Period or decimal point 


47 



MSX BASIC REFERENCE GUIDE 


& 

? 

< 

> 

¥ 


<Rubout> 

<Escape> 

<Tab> 

<Line feed> 
<Carriage 
return> 


Single quotation mark (apostrophe) 

Semicolon 

Colon 

Ampersand 

Question mark 

Less than 

Greater than 

Yen sign or integer division symbol 
(back slash in international versions) 
At sign 
Underscore 

Deletes last character typed. 

Escapes 

Moves print position to next tab stop. 
Tab stops are set every eight columns. 
Moves to next physical line. 

Terminates input of a line. 


2.1.4 Constants 


Constants are the values MSX-BASIC uses during execution. There 
are two types of constants: string and numeric. 

A string constant is a sequence of up to 255 alphanumeric 
characters enclosed in double quotation marks. 


Examples: 

"HELLO" 

"$25,000.00" 

"Number of Employees" 


Numeric constants are positive or negative numbers. MSX-BASIC 
numeric constants cannot contain commas. There are six types of 
numeric constants: 


1. Integer constants Whole numbers between -32768 and 32767. 

Integer constants do not contain decimal 
points. 


2. Fixed-point 
constants 


Positive or negative real numbers, i.e., 
numbers that contain decimal points. 


3. Floating-point Positive or negative numbers represented 
constants in exponential form (similar to scientific 

notation). A floating-point constant 
consists of an optionally signed integer 
or fixed-point number (the mantissa) 
followed by the letter E and an optionally 
signed integer (the exponent). The 
allowable range for floating-point 
constants is 10E-64 to 10E+63. 


48 



MSX BASIC REFERENCE GUIDE 


Examples: 

235.988E-7 = .0000235988 
2359E6 =2359000000 

(Double-precision floating-point constants 
are denoted by the letter D instead of E.) 


4. Hex constants 


5. Octal constants 


6. Binary constants 


Hexadecimal numbers, denoted by the 
prefix &H. 

Examples: 

&H7 6 
&H3 2F 

Octal numbers, denoted by the prefix &0. 

Examples: 

&0347 

&01234 

Binary numbers, denoted by the prefix &B. 

Examples: 

&B01110110 
StBlllOOlll 


o Single- And Double-Precision Numeric Constants 

Numeric constants may be either single-precision or double¬ 
precision numbers. Single-precision numeric constants are stored 
with 6 digits of precision, and are printed with up to 6 digits of 
precision. Double-precision numeric constants are stored with 14 
digits of precision and printed with up to 14 digits. Double¬ 
precision is the default for constants in MSX-BASIC. 

A single-precision constant is any numeric constant that has one 
of the following characteristics: 

1. Exponential form using E. 

2. A trailing exclamation point (!). 

Examples: 

-1.09E-06 

22.51 

A double-precision constant is any numeric constant that has one 
of these characteristics: 


49 



MSX BASIC REFERENCE GUIDE 


1. Any digits of number without any exponential or type 
specifier. 

2. Exponential form using D. 

3. A trailing number sign (#). 

Examples: 

3489 

345692811 
-1.0943 2D-06 
3489.0# 

7654321.1234 


2.1.5 Variables 


Variables are names used to represent values used in a BASIC 
program. The value of a variable may be assigned explicitly by 
the programmer, or it may be assigned as the result of 
calculations in the program. Before a variable is assigned a 
value, its value is assumed to be zero. 

o Variable Names And Declaration Characters 

MSX-BASIC variable names may be of any length. Up to 2 characters 
are significant. Variable names can contain letters and numbers; 
however, the first character must be a letter. Special type 
declaration characters are also allowed—see the discussion below. 


A variable name may not be a reserved word and may not contain 
embedded reserved words. Reserved words include all MSX-BASIC 
commands, statements, function names, and operator names (See 
appendix for the list). If a variable begins with FN, it is 
assumed to be a call to a user-defined function. 


Variables may represent either a numeric value or a string. String 
variable names are written with a dollar sign ($) as the last 
character, for example: A$ = "SALES REPORT". 

The dollar sign is a variable type declaration character; that is, 
it "declares" that the variable will represent a string. 

Variable names may also inherently declare the variables to be 
integer, single-precision, or double-precision. The last 
character in these variables must be one of the following 
variable-type declaration characters: 


% Integer variable 
I Single-precision variable 

# Double-precision variable 


The default type for a numeric variable name is double-precision. 


50 



USX BASIC REFERENCE GUIDE 


Examples of MSX-BASIC variable names: 

PI# Declares a double-precision value. 

MINIMUM! Declares a single-precision value. 

LIMIT% Declares an integer value. 

N$ Declares a string value. 

ABC Represents a double-precision value. 

Variable types may also be declared within a program by using the 
MSX-BASIC DEFINT, DEFSTR, DEFSNG, and DEFDBL statements. For de¬ 
tails, refer to the descriptions of these statements. 

o Array Variables 

An array variable is a group or a table of values that is organi¬ 
zed with the same variable name. Each element in an array is ref¬ 
erenced by an array variable (having an integer or an integer ex¬ 
pression as a subscript). Names for array variables may have as 
many subscripts as there are dimensions in the array. For example, 
V(10) would be the name of a variable in a one-dimension array, 

T(l,4) would be the name of a variable in a two-dimension array, 

and so on. MSX-BASIC supports a maximum number of 255 dimensions 

for an array. The maximum number of elements depends on the size 

of the computer's memory. 

o Space Requirements 

The following table lists the number of bytes that each variable 
occupies in memory. 


Variables: Type Bytes 

Integer 2 

Single-Precision 4 

Double-Precision 8 

Arrays: Type Bytes 

Integer 2 per element 

Single-Precision 4 per element 

Double-Precision 8 per element 

Strings: 3 bytes for bookkeeping plus the length of the 

string. 


2.1.6 Type Conversion 

When necessary, MSX-BASIC will convert a numeric constant from one 
type to another. The following rules and examples should be kept 
in mind. 


51 



MSX BASIC REFERENCE GUIDE 


1. If a numeric constant of one type is set to a numeric vari¬ 
able of a different type in a LET statement, the number is 
converted and stored as the type declared by the new varia¬ 
ble name, unless an attempt to set a string variable to a 
numeric variable is done. The latter case results the oc¬ 
currence of a "Type mismatch" error.) 

Example: 

10 A%=23.42 
20 PRINT A% 

RUN 

23 


2. During the evaluation of an expression, all operands of the 
arithmetic or relational operation are converted to a uni¬ 
form precision to match the most precise operand. The op¬ 
eration also results in the precision of the most precise 
operand. 

Examples: 


10 D=6/71 
20 PRINT D 
RUN 

.857142 85714286 


The operation was done in double- 
-precision and the result, returned 
in D, is double-precision. 


10 D! =6 / 7 
20 PRINT D! 
RUN 

.857143 


The operation was done in double- 
-precision and the result, returned 
to DI (a single-precision variable) 
was rounded and printed as single¬ 
precision. 


3. Logical operators convert their operands to integers and 
return integer results. Operands must be between -32768 
and 32767, or an "Overflow" error occurs. 


4. When a floating-point value is converted to an integer, the 
fractional portion is truncated. 


Example: 


10 C%=55.88 
20 PRINT C% 
RUN 
55 


5. If a double-precision variable is set to a single-preci¬ 
sion value, only the first six digits of the double-preci¬ 
sion are valid. Single-precision variables support only a 
maximum of six digits. 


52 



MSX BASIC REFERENCE GUIDE 


Example: 

10 Ai =SQR(2) 

20 B=A1 
30 PRINT AI,B 

RUN 

1.41421 1.41421 

2.1.7 Expressions and Operators 

An expression may be a string or numeric constant, a variable, or 
a combination of constants and variables with operators which 
produces a single value. 

Operators perform mathematical or logical operations on values. 
MSX-BASIC operators may be divided into four categories: 

1. Arithmetic 

2. Relational 

3. Logical 

4. Functional 


These categories will be described in the following sections, 
o Arithmetic Operators 

Arithmetic operators in MSX-BASIC have a defined order of prece¬ 
dence. The operators are listed below in order of precedence. 


Operator 

Operation 

Example 

a 

Exponentiation 

X 

< 

X 

- 

Negation 

-X 

*,/ 

Multiplication, Floating¬ 
point Division 

X*Y 

X/Y 

+ r~ 

Addition, Subtraction 

X+Y 


To change the above order of evaluation of operations, use paren¬ 
theses. The operations embedded within parentheses will be evalu¬ 
ated first. Within the parentheses themselves, the above evalua¬ 
tion order is followed. 

o Integer Division And Modulus Arithmetic 

The following two additional operations, integer division and mod¬ 
ulus arithmetic, are also available in MSX-BASIC: 

Integer division is denoted by the yen symbol (or the backslash in 
international versions). The operands are truncated to integers 
(between -32768 and 32767) before division is done. The quotient 


53 



MSX BASIC REFERENCE GUIDE 


is truncated to an integer. 

Examples: 

10¥4=2 

25.6 8¥6.99=4 

Integer division follows both multiplication and floating-point 
division in the above order of precedence. 

Modulus arithmetic is denoted by the operator MOD. Modulus 
arithmetic yields the (integer) remainder of integer division. 

Example: 

10.4 MOD 4=2 (10/4=2 with a remainder of 2) 

25.68 MOD 6.99=1 (25/6=4 with a remainder of 1) 

Modulus arithmetic follows integer division in the above order of 
precedence. 

o Overflow Or Division By Zero 

During the evaluation of an expression, if a division by zero is 
attempted, a "Division by zero" message is displayed, and the ex¬ 
ecution of the program is terminated. Also, if an overflow occurs 
during the evaluation of an expression, an "Overflow" message is 
displayed and the execution of the program is terminated. 

o Relational Operators 

Relational operators are used to compare two values. The result of 
the comparison is either "true" (-1) or "false" (0). The result 
can then be used to make decisions for program logic. (See the 
description on the "IF" statement.) 

The relational operators are as follows: 


Operator 

Relationship 


Exam pi 

- 

Equality 


X=Y 

<> 

Inequality 


XOY 

< 

Less than 


X<Y 

> 

Greater than 


X>Y 

<= 

Less than or 

equal to 

X<=Y 

>= 

Greater than 

or equal to 

X>=Y 


(The equals sign is also used to assign a value to a variable.) 


54 



MSX BASIC REFERENCE GUIDE 


When both arithmetic and relational operators are used in a single 
expression, the arithmetic operation is done first. For example, 

X+Y<(T-1)/Z is true if the value of X + Y is less than the value 
of T-l divided by Z. 

More examples: 

IF SIN(X)<0 GOTO 1000 
IF I MOD JOO THEN K=K+1 

o Logical Operators 

Logical operators test multiple relationships, bit manipulation, 
or Boolean operations. The logical operator returns a one-bit re¬ 
sult which is either "true" (not zero) or "false" (zero). Logical 
operations are performed after arithmetic and relational opera¬ 
tions in expressions. The outcome of a logical operation is de¬ 
termined as shown in Table 1. The operators are listed in their 
order of precedence. 

Table 1. Truth Table of MSX-BASIC Relational Operators 
NOT 

X 
1 
0 

AND 

X 
1 
1 
0 
0 

OR 

X 
1 
1 
0 
0 

XOR 

X 
1 
1 
0 
0 

EQV 

X 
1 
1 
0 
0 


NOT X 
0 
1 


Y 

1 

0 

1 

0 


X AND Y 
1 
0 
0 
0 


Y 

1 

0 

1 

0 


OR 

1 

1 

1 

0 


Y 

1 

0 

1 

0 


XOR 

0 

1 

1 

0 


Y 

1 

0 

1 

0 


X EQV Y 
1 
0 
0 
1 


55 



MSX BASIC REFERENCE GUIDE 


IMP 

X Y X IMP Y 

11 1 

10 0 

0 1 1 

0 0 1 


Besides using relational operators to make decisions on program 
flow, logical operators can connect two or more relations and re¬ 
turn true or false to be used in decisions. 

Examples: 

IF D<200 AND F<4 THEN 80 
IF I>10 OR K<0 THEN 50 
IF NOT P THEN 100 

Logical operators convert their operands to 16-bit, signed, two's 
complement integers between -32768 and 32767. If the operands are 
not in this range, an error results. If both operands are sup¬ 
plied as 0 or -1, the logical operators return 0s or -Is. The 
given operation is done on the integers by the results of the cor¬ 
responding bits in the two operands. 

It is thus possible to use logical operators to test bytes for a 
particular bit pattern. For instance, the AND operator may be used 
to "mask" bits of a status byte for an I/O port. The OR operator 
may be used to "unmask" bits of a status byte for an I/O port. 
The following are examples of how the logical operators work. 

63 AND 16=16 63 = binary 111111, and 16 = binary 10000, 

so 63 AND 16 =16. 

15 AND 14=14 15 = binary 1111, and 14 = binary 1110, 

so 15 AND 14 = 14 (binary 1110). 

-1 AND 8=8 -1 = binary 1111111111111111, and 8 = binary 1000, 

so -1 AND 8=8. 

4 OR 2=6 4 = binary 100, and 2 = binary 10, 

so 4 OR 2 = 6 (binary 110). 

10 OR 10=10 10 = binary 1010, 

so 1010 OR 1010 = 1010 (decimal 10). 

-1 OR -2=-l -l = binary llllllllllllllll 

and -2 = binary 1111111111111110, 
so -1 OR -2 = -1. 

The bit complement of sixteen zeros is sixteen ones 
(the two's complement representation of -1). 

NOT X=-(X+1) The two's complement of any integer is its bit 
complement plus one. 


56 



MSX BASIC REFERENCE GUIDE 


o Functional Operators 

In MSX-BASIC, functions are used in expressions to call previously 
defined operations such as SQR (square root) and SIN (sine) for 
use in evaluating operands. Some are resident functions provided 
already in the MSX-BASIC interpreter. 

Functions may also be defined within programs if they are not pro¬ 
vided with the MSX-BASIC system. These functions may be defined 
by using the "DEF FN" statement. For a more detailed discussion, 
refer to the descriptions for "DEF FN". 


o String Operations 

Two or more strings may be concatenated by using a plus sign (+). 
Example; 

10 A$=”FILE" ; B$="NAME" 

20 PRINT A$+B$ 

30 PRINT "NEW "+A$+B$ 

RUN 

FILENAME 
NEW FILENAME 

Two strings may also be compared by using the same relational op¬ 
erators used for numbers, as shown below: 

= <><><=> = 

Strings are compared by comparing the ASCII codes of both strings, 
comparing one character at a time. If all of the ASCII codes are 
the same, the strings are considered equal. If some of the ASCII 
codes are different, the string having the ASCII code with the 
lower code number will precede the other string. If the end of 
one of the strings is reached before the end of the other string 
is reached, the shorter string precedes the other string. During 
comparison, leading and trailing spaces are significant. 

Examples: 

"AA"<"AB" 

"FILENAME"="FILENAME" 

"X&">"X# n 
"CL ">"CL" 

"kg">"KG" 

"SMYTH“<"S MYTH E" 

B$<" 9/12/ 83" where B $«" 8/12/ 83 " 

Strings can thus be compared for alphabetization or for determi¬ 
ning branching of program logic. Note that when string variables 
are compared, the expressions must be enclosed in quotation marks. 

2.1.8 Program Editing 

MSX-BASIC also includes a Full Screen Editor to allow the program¬ 
mer to enter program lines and edit them using the entire screen. 


57 



MSX BASIC REFERENCE GUIDE 


The MSX-BASIC Full Screen Editor supports special keys for moving 
the cursor, for inserting or deleting characters, and for erasing 
lines or screens. These time-saving special functions and their 
key assignments will be discussed in the following sections. 

With the Full Screen Editor, programmers can move the cursor any¬ 
where on the screen and make the necessary corrections. To make 
changes, the cursor is placed on the first line to be changed, and 
after the changes are entered, the <RETURN> key is pressed at the 
beginning of each line. Lines in the stored programs will not be 
changed unless a <RETURN> is entered somewhere within the line. 

Writing Programs 

When MSX-BASIC is used and the "Ok" prompt is issued, the system 
is in the direct mode and is ready to receive a RUN command to ex¬ 
ecute the program or Editor commands. Except for commands to exe¬ 
cute programs, lines that are entered are processed by the Full 
Screen Editor. All lines of text beginning with numbers are con¬ 
sidered as program statements. The Editor processes the program 
statements in one of the following ways: 

1. A new line is added to the program if the line number is 
valid (between 0 and 65529) and at least one non-blank 
character follows the line number. 

2. An existing program line is modified if the line number 
already exists in the program and at least one non-blank 
character follows the line number. The new line replaces 
the text of the previously existing line. 

3. An existing program line is deleted if the line number 
already exists in the program and the new line contains 
only a line number. 

4. An error is generated. 

Am attempt to delete a non-existent line will result in an 
"Undefined line number" error. 

If the new line causes the program memory to be entirely 
filled, no line is added and "Out of memory" is displayed. 


More than one statement may be placed after a line number, except 
the statements must be separated by colons (:). (These colons do 
not require spaces.) A logical program line may have a maximum of 
255 characters, including the line number. 

Editing Programs 

The LIST command displays all or a part of the program currently 
residing in memory on the screen so that they can be edited with 
the Full Screen Editor. To modify the program, move the cursor to 
the location requiring change and do one of the following: 


58 



MSX BASIC REFERENCE GUIDE 


1. Type over existing characters 

2. Delete characters to the right of the cursor 

3. Delete characters to the left of the cursor 

4. Insert characters 

5. Append characters to the end of the logical line 


These actions are performed by special keys assigned to the 
Full Screen Editor (see the next section). 

Program lines are changed if a carriage return is entered while 
the cursor is located somewhere on the line. This action changes 
all editing done to the logical line, regardless of the number of 
physical lines the program line encompasses. The cursor can be 
located anywhere in the program line. 

Full. Screen Editor Functions 

The following table lists the hexadecimal codes for the MSX-BASIC 
control characters and summarizes their functions. The Control-key 
sequence normally assigned to each function is also listed. These 
conform as closely as possible to ASCII standards. 

A discussion of the individual control follows the table. 


Table 1. MSX-BASIC Control Functions. Control characters are 
entered by holding down CTRL and pressing the character key. 

Hex Control Special 

Code Key Key Function 


01 A 

02 * B 

03 * C 

04 * D 

05 * E 

06 * F 

07 * G 

08 H Back Space 
09 I Tab 

0A * J 

0B * K Home 

0C * L CLS 

0D * M Return 

0E * N 

OF * 0 

10 * P 

11 * Q 

12 * R INS 


Ignored 

Move cursor to start of previous word 
Break if MSX-BASIC is waiting for input 
Ignored 

Erase text to end of logical line 
Move cursor to start of next word 
Beep 

Backspace, deleting characters passed over 
Tab to next TAB stop 
Line feed 

Move cursor to home position 
Clear screen 

Carriage return (enter current logical 
line) 

Append at end of line 

Ignored 

Ignored 

Ignored 

Toggle between insert and typeover modes 


59 



MSX BASIC REFERENCE GUIDE 


13 

* 

S 


Ignored 


14 

* 

T 


Ignored 


15 

* 

U 


Erase logical line 

16 

* 

V 


Ignored 


17 

* 

W 


Ignored 


18 

* 

X 

Select 

Ignored 


19 

* 

Y 


Ignored 


1A 

* 

Z 


Ignored 


IB 


[ 

ESC 

Ignored 


1C 

* 

¥ 

Right arrow 

Move cursor 

right(back slash 

ID 

* 

] 

Left arrow 

Move cursor 

left 

IE 

* 

A 

Up arrow 

Move cursor 

up 

IF 

* 


Down arrow 

Move cursor 

down 

7F 


DEL 

DEL 

Delete character at cursor 


Note: The keys marked with asterisks (*) cancel the insert 
mode if the Full Screen Editor is in insert mode. 


PREVIOUS WORD 

The cursor is moved left to the first character of the previ¬ 
ous word. A word is defined as a character string composed 
of A- Z , a-z, or 0-9. 


BREAK 

Returns the control to MSX-BASIC direct mode without changing 
the line that was being edited. 

ERASE TO END OF LINE 

The cursor is moved to the end of the logical line, and the 
characters passed over are deleted. Additional characters 
at the new cursor position are appended to the line. 

NEXT WORD 

The cursor is moved right to the first character of the next 
word. A word is defined as a character string composed of 
A-Z, a-z, or 0-9. 


BEEP 

Produces the beep tone. 

BACKSPACE 

Deletes the character to the left of the cursor. All 
characters to the right of the cursor are moved to the left 
one position. Any subsequent characters and lines within the 
current logical line are moved up (wrapped). 

TAB 

TAB moves the cursor to the next tab stop, overwriting all 
spaces. Tab stops occur every 8 characters. 

CURSOR HOME 

Moves the cursor to the upper left corner of the screen. The 
screen is not erased. 


60 



MSX BASIC REFERENCE GUIDE 


CLEAR SCREEN 

Moves the cursor to home position and clears the entire 
screen, regardless of where the cursor is positioned when the 
key is entered. 

CARRIAGE RETURN 

A carriage return ends the logical line and saves it as part 
of the MSX-BASIC program. 

APPEND 

Moves the cursor to the end of the line, without deleting the 
characters passed over. All characters typed at the new 
position are appended to the logical line until a carriage 
return is encountered. 

INSERT 

Toggle switch for insert mode. When insert mode is on, the 

cursor size is reduced and characters are inserted at the 

current cursor position. Characters to the right of the 
cursor move right as new characters are typed. Line wrap 

is done on characters going beyond the physical line. If 

the insert mode is off, the size of cursor returned to 
normal, and the typed characters replace any existing 
characters on the line. 

CLEAR LOGICAL LINE 

Erases entire logical line when this key is entered anywhere 
in the line. 

CURSOR RIGHT 

Moves the cursor one position to the right. Line wrap is 
done on characters going beyond the physical line. 

CURSOR LEFT 

Move the cursor one position to the left. Line wrap is done 
on characters going beyond the physical line. 

CURSOR UP 

Moves the cursor up one physical line at the current 

position. 

CURSOR DOWN 

Moves the cursor down one physical line at the current 

position. 

o Logical line Definition with INPUT 

A logical line ordinarily consists of all the characters on all of 
its physical lines. During the execution of an INPUT or LINE 
INPUT statement, however, this definition is modified slightly to 
allow for formatted input. When either statement is executed, 
the logical line is restricted to characters typed or passed over 
by the cursor. The insert mode and the delete function only 

move characters within the logical line, and DELETE decrements 

the size of the line. 


61 



MSX BASIC REFERENCE GUIDE 


The insert mode increments the logical line, except when the 
characters moved will write over non-blank characters that are on 
the same physical line but not part of the logical line. If this 
occurs, the non-blank characters that are not part of the logical 
line are preserved, and the characters at the end of the logical 
line are erased. This is to preserve labels existing prior to the 
INPUT statement. If an incorrect character is entered as the line 
is being typed, it can be deleted using the <Back Space> key or 
with a Control-H. Once the undesired character(s) have been 
deleted, simply continue typing the line. 

To delete the current line being typed, type Control-U. 

To correct program lines of the program currently in memory, 
simply type a new line using the same line number. MSX-BASIC will 
automatically replace the old line with the new line. 

To delete the entire program currently in memory, enter a NEW 
command. Usually the NEW command is only used to clear the memory 
before entering a new program. 

2.1.9 Special keys 

MSX-BASIC supports several special keys (function keys and the 
STOP key) as follows. 

o Function Keys 

MSX-BASIC has ten predefined function keys. The current settings 
of these keys are displayed on the last line on the screen and can 
be redefined within a program with the KEY statement. The initial 
settings for the keys are as follows: 


FI 

color [b] 

F2 

auto lb] 

F4 

goto lb] 

F5 

list lb] 

F5 

runIcr] 

F6 

color 15,4,7Icr] 

F7 

cload" 

F8 

cont(cr] 

F9 

list.Lcr1lu] Cu] 

F10 

Ids] run lcr ] 


Meanings of abbreviations: 

[b] = blank character 
tcr]= carriage return 
[ul = cursor up character 
lcls]=clear screen character 

( F6 color 15,4,4[cr] 
in international versions) 


The function keys can also be used as event trap keys. Refer to 
the ON KEY GOSUB and KEY ON/OFF/STOP statements for details. 

o STOP key 

When MSX-BASIC is in the direct mode, the STOP key has no effect 
on the current operation, and MSX-BASIC simply ignores its input. 


62 



USX BASIC REFERENCE GUIDE 


If MSX-BASIC is executing a program and the STOP key is pressed, 
program execution is suspended and the cursor is displayed to 
indicate that execution was suspended. If the STOP key is pressed 
again, execution is resumed. If the CTRL key is held down and the 
STOP key is pressed, MSX-BASIC stops executing the program and 
returns to the direct mode with the following message. 

Break in nnnn 

The nnnn is the line number of the program that was being executed 
when the execution was aborted. 

2.1.10 ERROR MESSAGES 

If an error is encountered during program execution, execution 
terminates, and the appropriate error message is displayed. Refer 
to 2.1.17 for a complete list of MSX-BASIC error codes and error 
messages. 

2.1.11 Commands and Statements except those doing I/O 

AUTO [<line number>[,<increment>]3 

Automatically generates line numbers after each carriage 
return. 

AUTO begins numbering at <line number> and increments each 
subsequent line number by <increment>. The default for both 
values is 10. If <line number> is followed by a comma and 
<increment> is not specified, the last increment specified in 
an AUTO command is assumed. 

If AUTO generates an existing line number, an asterisk is 
printed after the line number as a warning that the existing 
line will be replaced. If a carriage return is instead 
immediately entered, the existing line is preserved and the 
next line number is generated. 

The AUTO command is terminated by typing Control-C or Control- 
STOP, and MSX-BASIC returns to the direct mode. The line being 
input when Control-C is typed is not saved. 

CONT 

Continues program execution after a BREAK or STOP. 

DELETE Kline number>3 [-<line numberM 
Deletes program lines. 

BASIC always returns to the direct mode after a DELETE is 
entered. If the Cline number> does not exist, an 'Illegal 
function call' error occurs. 

LIST Kline number>[-Kline number>]]] 

Lists all or a part of the program. 


63 



MSX BASIC REFERENCE GUIDE 


If both <line number> parameters are omitted, the program is 
listed beginning at the lowest line number. 

If only the first Cline number> parameter is specified, only 
that line is listed. 

If the first Cline number> parameter and a are specified, 

that line and all lines following it are listed. 

If and the second Cline number> parameter are specified, 

all lines beginning at the lowest line number are listed until 
the specified number is reached. 

If both Cline number> parameters are specified, the lines in 
the range from the first Cline number> through the second 
Cline number> are listed. 

The displayed listing can be terminated by holding down "CTRL 1 ' 
and pressing the "STOP" key. The listing can be temporarily 
suspended by pressing the "STOP" key, and resumed by pressing 
the "STOP" key again. 

LLIST [Cline number>I-[Cline number>]]] 

Lists all or part of the program on the printer, with the use 
of the parameters being identical for the LIST command. 


NEW 

Deletes the current program in memory and resets all variables. 

RENUM [[Cnew number >H, [Cold number>] [, Cincrement>] ] ] 

Renumbers program lines. 

The Cnew number> parameter is the first line that will be used 
in the renumbered program, with the default being 10. The Cold 
number> is the line of the current program where renumbering is 
to begin, with the default being the first line of the program. 
The Cincrement> is the increment used in renumbering, and the 
default is 10. 

RENUM also changes all line number references following GOTO, 
GOSUB, THEN, ELSE, ON..GOTO, ON..GOSUB and ERL statements to 
reflect the new line numbers. If a nonexistent line number 
appears after one of the above statements, an 'Undefined 
line nnnn in mmmm 1 is displayed. The reference to the 
incorrect line number (nnnn) is not changed by RENUM, but line 
number mmmm may be changed. 

NOTE: RENUM can neither be used to change the order of program 
lines (for example, entering RENUM 15,30 for a program having 
the three lines numbered 10, 20 and 30), nor can it be used to 

generate line numbers greater than 65529. In either case, an 
'Illegal function call' error results. 

RUN [Cline number>] 

Executes the current program. 


64 



USX BASIC REFERENCE GUIDE 


Execution begins at the first line of the program unless the 

<line number> parameter is specified, in which case, execution 
begins at that line. 

TRON/TROFF 

Traces the execution of program statements. 

The TRON statement can be executed in either the direct or 
indirect mode to print the line number being executed when the 
program is RUN. The line numbers are displayed within square 
brackets. The TRON function continues until a TROFF statement 
or a NEW command is executed. 

CLEAR E<string space>[,<highest address>]] 

Sets all numeric variables to zero, all string variables to 
null, and closes all open files; and optionally sets the end of 
memory. 

The <string space> parameter sets the memory size allocated for 
string variables, with the default being 200 bytes. The 
<highest address> parameter sets the highest memory address to 
be used by MSX-BASIC. 

DATA <list of constants> 

Used to set the constants to be used by the program's READ 
statements. 

DATA statements are not executable and they may be placed 
anywhere in a program. If a DATA statement is used to define 
more than one constant, the constants must be delimited by 
commas. The maximum number of constants that may be placed on 
a logical line is limited only by the size of the logical line. 
READ statements replace the constants for the variables used by 
the program in the sequence listed in the DATA statement(s). 

The <list of constants> may contain numeric constants in any 
format: fixed point, floating point, or integer. Numeric 

expressions are not allowed in DATA statements. String 
constants may also be used in DATA statements. If the string 
contains commas, colons, or significant leading or trailing 
spaces, the string must be embedded in quotation marks. 

The variable type required (numeric or string) required by a 
READ statement must match the type specified in its DATA 
statement. The RESTORE statement may be used to set the data to 
be read from a specific line. If the RESTORE statement is not 
used, the data is read from the program's first DATA statement. 

Dim Clist of subscripted variables> 

Specifies the maximum size of array variables. 

If no DIM statement is specified, the maximum size allocated in 
memory for the array is 10. If a subscript greater than the 
maximum size is used, a 'Subscript out of range' error occurs. 
The subscripts always begin at 0. 


65 



MSX BASIC REFERENCE GUIDE 


DEFINT <range(s) of letters> 

DEFSNG <range(s) of letters> 

DEFDBL <range(s) of letters> 

DEFSTR <range(s) of letters> 

Declares the variable type to be integer, single-precision, 
double-precision, or string. 

The DEFINT/SNG/DBL/STR statements declare that variable names 
beginning with the letter(s) specified will always be 
that type of variable. An exception to this rule is when a 
variable type declaration character is used for a variable. 
Section 2.1.5 lists the variable declaration characters. 

DEF FN<name> [ ^parameter list>) ] =<f unction definition> 

Defines and names a user-programmed function. 

The <name> must be a legal variable name and is preceded by FN. 
The <name> becomes the name of the defined function. The 
<parameter list> comprises the variable names in the function 
definition that are replaced when the function is called, and 
they must be separated by commas. The <function definition> is 
an expression performing the function, and is limited to to one 
line. Variable names appearing in the expression serve only to 
define the function; they do not affect program variables 
having the same name. The <parameter list> may have a variable 
name used, and if so, the value of the variable is supplied 
when the function is called, otherwise, the current value of 
the variable is used. 

The variables in the parameter list represent, on a one-to-one 
basis, the argument variables or values that will be given in 
the function call. 

If the function specifies a variable type, the expression's 
value takes on that type befor being returned to the calling 
statement. If the types specified in the function name and its 
argument do not match, a 'lype mismatch' error occurs. 

The DEFFN statement must be executed before the defined 
function is used, if not, an 'Undefined user function' error 
occurs. Note that DEFFN cannot be used in the direct mode. 

DEFUSR[<digit>]=<integer expression> 

Specifies the entry point of a machine language subroutine. 

The <digit> may be any digit from 0 to 9, and corresponds to 
the number of the USR routine whose address is being specified. 
If <digit> is omitted, DEFUSRO is assumed. The value of 
Cinteger expression> is the entry point of the USR routine. 


66 



USX BASIC REFERENCE GUIDE 


DEFUSR statements may be reused as many times as necessary 
within a program to redefine the entry points of subroutines. 

ERASE Clist of array variables> 

Eliminates arrays from a program. 

Arrays may be reDlMensioned after they are ERASEd, or the 
previously allocated array space in memory may be used for 
other purposes. If an attempt is made to reDIMension an array 
without a prior ERASE, a ’Redimensioned array' error occurs. 


END 

Terminates program execution, closes all files and returns to 
direct mode. 

An END statement may be placed anywhere in a program to end its 
execution. Unlike STOP, the END statement does not cause a 
BREAK message to be displayed. An END statement located at the 
end of a program is optional. 

ERROR <integer expression> 

Simulates the occurrence of an error or allows error codes to 
be defined by the user. 

The value of <integer expression> must be greater than 0 and 
less than 255. If the value of Cinteger expression> equals an 
error code already in use by BASIC, the ERROR statement will 
simulate the occurrence of that error, and the corresponding 
error message will be printed. 

To define an error code, use a value that is greater than that 
used by BASIC. Section 2.1.17 lists the error codes and 
messages. Use the highest available codes to maintain 
compatibility in case more error codes are added to later 
versions of BASIC. The new user-defined error code may then be 
handled in an error trap routine. One such example follows. 

10 ON ERROR GOTO 1000 

120 IF A$="Y" THEN ERROR 250 


1000 IF ERR=250 THEN PRINT "Sure?" 


If an ERROR statement specifyinge a code for which no error 
message is defined or an ERROR statement having no error trap 
routine is executed, MSX-BASIC will respond with an 
’Unprintable error', and execution will be terminated. 


67 



MSX BASIC REFERENCE GUIDE 


FOR <variable>=x TO y [STEP zl 
• • 

NEXT [<variable>][,<variable>...] 

Allows a series of instructions to be performed in a loop a 
given number of times. 

The <variable> is used as a counter for the FOR...NEXT loop. 
It may be integer, single-precision, or double-precision, where 
x, y, and z are numeric expressions. The first numeric 
expression (x) is the initial value of the counter. The 
second numeric expression (y) is the final value of the 
counter. The program lines following the FOR statement are 
executed until the NEXT statement is encountered. Then the 
counter is incremented by the value of STEP. The value of 
the counter is then compared with the final value (y), and if 
it is not greater, execution is branched back to the statement 
immediately following the FOR statement and the statements 
within the loop are repeated. If the counter is exceeded, 
execution continues with the statement following the NEXT 
statement. If STEP is not specified, the default is one. 

If STEP is negative, the final value of the counter must be 
less than the initial value. The counter is decremented each 
time through the loop, and the loop is executed until the 
counter is less than the final value. 

The loop is executed at least once if the initial value of the 
loop times the sign of the step exceeds the final value times 
the sign of the step. 

FOR...NEXT loops may be nested, that is, a FOR...NEXT loop may 
be placed within another FOR...NEXT loop. When loops are 
nested, each loop must have a different variable name for its 
counter. The NEXT statement for the inside loop must appear 
before the NEXT for the outside loop. If nested loops share 
the same end point, a single NEXT statement may be used for all 
of them. The depth of nesting of FOR...NEXT loops is limited 
only by the available memory. 

The variable(s) in the NEXT statement may be omitted, in which 
case the NEXT statement will match the most recent FOR 
statement. If a NEXT statement is encountered before its 
corresponding FOR statement, a 'NEXT without FOR' error message 
is issued and execution is terminated. 

GOSUB <line number> 


RETURN [<1ine number>] 

Branches to the subroutine beginning at <line number> and 
returns from a subroutine. 

The <line number> is the first line of the subroutine. A 
subroutine may be called any number of times in a program, and 


68 



MSX BASIC REFERENCE GUIDE 


a subroutine may be called from within another subroutine. 
Nesting of subroutines is limited only by the available memory. 

RETURN statements in subroutines cause BASIC to branch back to 
the statement following the most recent GOSUB statement. A 
subroutine may contain more than one RETURN statement if it is 
required by the program logic. Subroutines may be placed 
anywhere in the program, but should be readily distinguishable 
from the main program for greater understandability. To 
prevent accidental entry into a subroutine, it may be preceded 
by a STOP, END, or GOTO statement that directs program control 
around the subroutine. Otherwise, a 'RETURN without GOSUB' 
error will occur and execution terminates. 

GOTO <line number> 

Branches unconditionally out of the normal program sequence to 
a specified <line number>. 

If <line number> is an executable statement, that statement and 
those following are executed. If it is a nonexecutable 
statement, execution proceeds at the first executable statement 
encountered after Cline number>. 

IF <expression> THEN Cstatement(s)I Cline number> 

[ELSE Cstatement(s) I Cline number>] 

IF Cexpression> GOTO Cline number> 

[ELSE Cstatement(s)I Cline number>] 

Changes the program flow based on the result returned by an 
expression. 

If the result of Cexpression> is not zero, the THEN or GOTO 
clause is executed. THEN may be followed by either a line 
number for branching or one or more statements to be executed. 
GOTO is always followed by a line number. If the result of 
Cexpression> is zero, the THEN or GOTO clause is ignored and 
the ELSE clause, if present, is executed. Execution continues 
with the next executable statement. 

Exampl e: 

A=1:B=2 -> A=B is zero (FALSE). 

A=2:b=2 -> A=B is not zero (TRUE). 

IF_THEN...ELSE statements may be nested. Nesting is limited 

only by the length of the line. If the statement does not 
contain the same number of ELSE and THEN clauses, each ELSE is 
matched with the closest unmatched THEN. For example, the 
following statement will not print "AOC" when AOB. 

IF A=B THEN IF B=C THEN PRINT "A=C" 

ELSE PRINT "AOC" 

The statement will print "AOC" when A=B and BOC. 

If an IF...THEN statement is followed by a line number in the 


69 



MSX BASIC REFERENCE GUIDE 


direct mode, an ’Undefined line* error results unless a 
statement with the specified line number had previously been 
entered in the indirect mode. 

INPUT ["<prompt string>"?]<1ist of variables> 

Allows input from the keyboard during program execution. 

When an INPUT statement is encountered, program execution 
pauses and a question mark is printed to indicate that the 
program is waiting for data. If a "<prompt string>" is 
included, the string is printed before the question mark. The 
required data is entered by the keyboard. 

The data that is entered is assigned to the variable(s) given 
in <variable list>. The number of data items supplied must be 
the same as the number of variables in the list. The data 
must be separated by commas. 

The variables named in the <list of variables> may be numeric 
or string variables (including subscripted variables). The 
entered data type must agree with the type specified by the 
variable name. Strings entered in response INPUT statements do 
not need to be embedded in quotation marks. 

If the wrong variable type is input (a string variable instead 
of a numeric variable, etc.), a "PRedo from start” message is 
displayed. No value is assigned until an acceptable response 
is given. An example of this follows. 

list 

10 INPUT "A and B";A,B 
20 PRINT A+B 
Ok 
run 

A and B? 10,00 
PRedo from start 
A and B? 10,20 
30 
Ok 

If the response to the INPUT statement has too many items, an 
"PExtra ignored" message is displayed, and the next statement 
is executed. One such example follows. 

list 

10 INPUT "A and B”;A,B 
20 PRINT A+B 
Ok 
run 

A and B? 10,20,30 
PExtra ignored 
30 
Ok 


70 



MSX BASIC REFERENCE GUIDE 


Responding to an INPUT statement with too few items causes two 
question marks to be printed and a wait for the next data item. 

Example: 

list 

10 INPUT "A and B";A,B 
20 PRINT A+B 
Ok 
run 

A and B? 10 (The 10 was typed in by the user) 

?? 20 (The 20 was typed in by the user) 

30 

Ok 

The program can be suspended at the INPUT statement by typing 
Control-C or by holding down the "CTRL” key and pressing 
"STOP". MSX-BASIC will return to the direct mode and respond 
with "Ok". To resume execution, type CONT. 

LINE INPUT ["<prompt string>";]<string variable> 

Inputs an entire line (up to 254 characters) to a string 
variable, without the use of delimiters. 

The <prompt string> is displayed on the console before input is 
accepted. No question mark is printed unless it is a part of 
the <prompt string>. All input typed to the console before a 
carriage return is assigned to <string variable>. 

The program can be suspended at the LINE INPUT statement by 
typing Control-C or by holding down the "CTRL" key and pressing 
"STOP". MSX-BASIC will return to the direct mode and respond 
with "Ok". To resume execution, type CONT. 

[LET] <variable>=<expression> 

Assigns the value of an expression to a variable. 

Note that the word LET is optional. 

LPRINT [<list of expressions>] 

LPRINT USING <string expressions<1ist of expressions> 

Prints data on the line printer. (Refer to the PRINT and PRINT 
USING statements below for details.) 

MID?(<string exp. 1>),n[,m])=<string exp.2 > 

Replaces a portion of one string with another string. 

The characters in <string exp.l>, beginning at position n, are 
replaced by the characters in <string exp.2>. The optional m 
refers to the number of characters from <string exp.2> that 
will be used in the replacement. If m is omitted or included, 
the characters replaced does not go beyond the original length 
of <string exp.l>. 

ON ERROR GOTO <line number> 

Enables error trapping and specifies the first line of the 


71 



MSX BASIC REFERENCE GUIDE 


error handling subroutine. 

Once error trapping has been enabled, all errors detected, 
including direct mode errors (e.g., Syntax errors), will cause 
a jump to the specified error handling subroutine. If <line 

number> does not exist, an 'Undefined line number' error 
occurs. To disable error trapping, execute an ON ERROR GOTO 0. 
Subsequent errors will then display error messages and halt 
execution. An ON ERROR GOTO 0 statement appearing in an error 
trapping subroutine will cause BASIC to stop and display the 
error message for the error that caused the trap. It is 
recommended that all error trapping subroutines execute an 
ON ERROR GOTO 0 if an error is encountered for which there is 
no recovery action. 

If an error occurs during execution of an error handling 
subroutine, the BASIC error message is printed and execution 
terminates. Error trapping does not occur within the error 
handling subroutine. 

ON <expression> GOTO Clist of line numbers> 

ON <expression> GOSUB <1ist of line numbers> 

Branches to one of several specified line numbers, depending 
on the value returned when an expression is evaluated. The 
value of <expression> determines which line number in the list 
will be used for branching. For example, if the value is 
three, the third line number in the list will be the 
destination of the branch. If the value is not an integer, 
the fractional portion is discarded.) 

In the ON...GOSUB statement, each line number in the list must 
be the first line number of a subroutine. 

If the value of <expression> is either zero or is greater than 
the number of items in the list (and <= 255), MSX-BASIC 

continues with the next executable statement. if the value of 
<expression> is either negative or is greater than 255, an 
'Illegal function call' error occurs. 

POKE Cmemory address>,<integer expression> 

Writes a (decimal) byte to a (decimal) memory location. 

The <memory address> is the address of the memory location to 
be written to (POKEd). The <integer expression> is the data 
(byte) to be POKEd. It must be in the range 0 to 255. The 
Cmemory address> must be in the range -32768 to 65535. If this 
value is negative, the address is computed by subtraction from 
65536. For example, a -1 is the same as 65535 (65536-1=65535). 
Otherwise, art 'Overflow' error occurs. 

PRINT [<list of expressions>] 

Displays data to the console. 

If the Clist of expressions> is omitted, a blank line is 
printed. If the Clist of expressions> is included, the values 


72 



MSX BASIC REFERENCE GUIDE 


of the expressions are displayed on the console. An expression 
in the list may be a numeric and/or a string expression. 
Strings must be enclosed in quotation marks. 

The position of each displayed item is determined by the 
punctuation used to separate the items in the list. MSX-BASIC 
divides the line into print zones of 14 spaces each. In the 
<list of expressions>, a comma causes the next value to be 
displayed at the beginning of the next zone. A semicolon 
causes the next value to be displayed immediately after the 
last value. One or more spaces between the expressions are 
treated as semicolons. 

If a comma or a semicolon terminates the Clist of expressions>, 
the next PRINT statement begins printing on the same line, 
spacing accordingly. If the <list of expressions> terminates 
without a comma or a semicolon, a carriage return is printed at 
the end of the line. If the printed line is longer than the 
console width, MSX-BASIC goes to the next physical line and 
continues printing. 

A displayed number is always followed by a space. Positive 
numbers are preceded by a space. Negative numbers are preceded 
by a minus sign. 

A question mark may be used instead of the word PRINT. 

PRINT USING <string expression>;<1ist of expressions> 

Displays strings or numerics using a specified format. 

The <list of expressions> is comprised of the string 
expressions or numeric expressions that are to be printed, 
separated by semicolons. The <string expression> is a string 
literal (or variable) comprising special formatting characters. 
These formatting characters (see below) determine the field and 
the format of the printed strings or numbers. 

When PRINT USING is used to print strings, one of the following 
three formatting characters may be used to format the string 
field: 

*t | n 

Specifies that only the first character in the given string is 
to be printed. 

Example: 

A$="Japan" 

Ok 

PRINT USING "I";A$ 

J 

Ok 

"& n spaces &" (Japanese. Refer to 5.4 for other versions.) 


73 



MSX BASIC REFERENCE GUIDE 


Specifies that 2+n characters from the string are to be printed. 
If the 'S' signs are typed with no spaces, two characters will 
be printed; with one space three characters will be printed, 
and so on. If the string is longer than the field, the extra 
characters are ignored. If the field is longer than the string, 
the string will be left-justified in the field and padded with 
spaces on the right. 


Example: 

A$="japan" 

Ok 

PRINT USING "& &";AS 

Japa 

Ok 


n @ n (Japanese. Refer to 5.4 for other versions.) 

Specifies that the whole character in the given string is to 
be printed. 

Example: 

A$="Japan" 

Ok 

PRINT USING "I love @ very much.";A$ 

I love Japan very much. 

Ok 


When PRINT USING is used to print numbers,the following special 
characters may be used to format the numeric field: 

A number sign is used to represent each digit position. The 
digit positions are always filled. If the number to be printed 
has fewer digits than positions specified, the number will be 
right-justified (preceded by spaces) in the field. 

A decimal point may be inserted at any position in the field. 
If the format string specifies that a digit is to precede the 
decimal point, the digit will always be printed (as 0 if 
necessary). Numbers are rounded as necessary. 

Example: 

PRINT USING "###.##";10.2,2,3.456,.24 
10.20 2.00 3.46 0.24 

Ok 

A plus sign at the beginning or end of the format string will 
cause the sign of the number (plus or minus) to be printed 
before or after the number. 

Example: 


74 



USX BASIC REFERENCE GUIDE 


PRINT USING "+###.##";1.25,-1.25 
+1.25 -1.25 

Ok 

PRINT USING "###.##+";1.25,-1.25 
1.25+ 1.25- 

Ok 

« _n 

A minus sign at the end of the format field will cause negative 
numbers to be printed with a trailing minus sign. 

Example: 

PRINT USING "###.##-";1.25,-1.25 
1.25 1.25- 

Ok 

»**" 

A double asterisk at the beginning of the format string causes 
leading spaces in the numeric field to be filled with asterisks. 
The ** also specifies positions for two or more digits. 

Example: 

PRINT USING ”**#.##";1.25,-1.25 

**1.25*-1.25 

Ok 

"¥¥" (Japanese. Refer to 5.4 for other versions.) 

A double yen sign causes a yen sign to be printed to the 
immediate left of the formatted number. The ¥¥ specifies two 
more digit positions, one of which is the yen sign. The 
exponential format cannot be used with ¥¥. Negative numbers 
cannot be used unless the minus sign trails to the right. 

Example: 

PRINT USING ”¥¥###.##";12.35,-12.35 
¥12.35 -¥12.35 
Ok 

PRINT USING "¥¥###.##-"?12.35,-12.35 
¥12.35 ¥12.35- 

Ok 

"**¥” (Japanase. Refer to 5.4 for other versions.) 

The **¥ at the beginning of a format string combines the 
effects of the above two symbols. Leading spaces will be 
filled with asterisks and a yen sign will be printed before the 
number. **¥ specifies three more digit positions, one of which 
is the yen sign. 

Example: 

PRINT USING "**¥#.##";12.35 
*¥12.35 


75 



MSX BASIC REFERENCE GUIDE 


Ok 

If ff 
t 

A comma that is to the left of the decimal point in a 
formatting string causes a comma to be printed to the left of 
every third digit to the left of the decimal point. A comma 
that is at the end of the format string is printed as part of 
the string. A comma specifies another digit position. The 
comma has no effect if used with the exponential format. 

Example; 

PRINT USING "####,.##"?1234.5 

1,234.50 

Ok 

PRINT USING "####.##,";1234.5 
1234.50, 

Ok 


II * 


~ n 


Four carats may be placed after the digit position characters 
to specify exponential format. The four carats allow space for 
E+xx to be printed. Any decimal point position may be 
specified. The significant digits are left-justified, and the 
exponent is adjusted. Unless a leading + or trailing + or - is 
specified, one digit position will be used to the left of the 
decimal point to print a space or minus sign. 


Example; 

PRINT USING "##.##--;234.56 

2.35E+02 

Ok 

PRINT USING "#.##-;-12.34 

1.23E+01- 
Ok 

PRINT USING "+#.##-";12.3 4,-12.34 

+1.23 E+01-1.23 E+01 
Ok 


If the number to be printed is larger than the specified 
numeric field, a percent sign is printed in front of the number. 
Also, if rounding causes the number to exceed the field, a 
percent sign will be printed in front of the rounded number. 


Example: 

PRINT USING "##.##";123.45 
%123.45 
Ok 

PRINT USING 999 

% 1.00 

Ok 


76 



MSX BASIC REFERENCE GUIDE 


If the number of digits specified exceed 24, an 'Illegal 
function call' error will result. 

READ <list of variables> 

Reads values from a DATA statement and assigns them to 
variables. 

A READ statement must always be used in conjunction with a DATA 
statement. READ statements assign variables to DATA statement 
values on a one-to-one basis. READ statement variables may be 
numeric or string, and the values read must agree with the 
variable types specified. If they do not agree, a 'Syntax 
error' will result. 

A single READ statement may access one or more DATA statements 
(they will be accessed in order), or several READ statements 
may access the same DATA statement. If the number of variables 
in <1ist of variables> exceeds the number of elements in the 
DATA statement(s), an 'Out of DATA' error will result. If the 
number of variables specified is fewer than the number of 
elements in the DATA statement(s), subsequent READ statements 
will begin reading data at the first unread element. If there 
are no subsequent READ statements, the extra data is ignored. 

To reread DATA statements from the start, use the RESTORE 
statement. 

REM <remark> 

Allows explanatory remarks to be inserted in a program. 

REM statements are not executed but are output exactly as 
entered when the program is listed. 

REM statements may be branched to (from a GOTO or GOSUB 
statement), and execution will continue with the first 
executable statement after the REM statement. 

Remarks may be added to the end of a line by preceding the 
remark with a single quotation mark instead of :REM. 

Do not use the above in a DATA statement as it would be 
considered legal data. 

RESTORE [<line number>] 

Allows DATA statements to be reread from a specified line. 

After a RESTORE statement is executed, the next READ statement 
accesses the first item in the first DATA statement in the 
program. If <1ine number> is specified, the next READ statement 
accesses the first item in the specified DATA statement. If 
a nonexistent line number is specified, an 'Undefined Line 
number' error will result. 


77 



MSX BASIC REFERENCE GUIDE 


RESUME 

RESUME 0 

RESUME NEXT 

RESUME <line number> 

Continues program execution after an error recovery procedure 
has been performed. 

Any one of the four formats shown below may be used, depending 
upon where execution is to resume: 

RESUME or RESUME 0 

Execution resumes at the statement which caused the error. 
RESUME NEXT 

Execution resumes at the statement immediately following the 
one which caused the error. 

RESUME <1 ine number> 

Execution resumes at Cline number> 

A RESUME statement that is not in an error trap subroutine 
causes a 'RESUME without' error. 

STOP 

Terminates program execution and returns to command level. 

A STOP statement may be used anywhere in a program to terminate 
execution. When a STOP statement is encountered, the following 
message is printed: 

Break in nnnn (nnnn is a line number) 

Unlike the END statement, the STOP statement does not close 
files. 

Execution is resumed by issuing a CONT command. 

SWAP <variable>,<variable> 

Exchanges the values of two variables. 

Any type of variable may be SWAPped (integer, single-precision, 
double-precision, string), but the two variables must be of 
the same type, or a 'Type mismatch' error results. 


78 



MSX BASIC REFERENCE GUIDE 


2.1.12 Functions except those doing I/O 
ABS(X) 

Returns the absolute value of the expression X. 

ASC(X?) 

Returns a numerical value that is the ASCII code of the first 
character of the string X?. If x? is null, a 'Illegal function 
call' error is returned. 

ATN(X) 

Returns the arctangent of X in radians. Result is in the range 
“pi/2 to pi/2. The expression X may be any numeric type, but 
the evaluation of ATN is always performed in double precision. 

BIN?(n) 

Returns a string which represents the binary value of the 
decimal argument. The numeric expression, n, must be between 
-32768 and 65535. If n is negative, the two's complement is 
used. That is, BIN$(-n) is the same as BIN?(65536-n). 

CDBL(X) 

Converts X to a double precision number. 

CHR? (I) 

Returns a string whose one element is the ASCII code for I. 

CHR? is commonly used to send a special character to the 
console. 

CINT(X) 

Converts X to an integer number by truncating the fractional 
portion. If X is not between -32768 and 32767, an 'Overflow' 
error occurs. 

COS(X) 

Returns the cosine of X in radians. COS(X) is calculated to 
double precision. 

CSNG(X) 

Converts X to a single precision number. 

CSRLIN 

Returns the vertical coordinate of the cursor. 

ERL/ERR 

The ERR and ERL variables are usually used in IF-THEN 
statements to direct program flow in the error trap routine. 
When an error handling subroutine is entered, the variable ERR 
contains the error code for error,and the variable ERL contains 
the line number of the line in which the error was detected. 

If the statement that caused the error was a direct mode 


79 



MSX BASIC REFERENCE GUIDE 


statement, ERL will contain 65535. To test if an error occurred 
in a direct statement, use the following statement. 

IF 6553 5=ERL THEN ..... 

Otherwise, use the following statements. 

IF ERL=<line number> THEN .... 

IF ERR=<error code> THEN.... 

Because ERL and ERR are reserved variables, neither may appear 
to the left of the equals sign in a LET (assignment) statement. 

EXP(X) 

Returns e to the power of X. X must be <=145.06286085862. If 
EXP overflows, the 'Overflow' error message is printed. 

fix( x) 

Returns the integer part of X (fraction truncated). FIX(X) is 
equivalent to SGN(X) *INT(ABS(X) ) . The major difference between 
FIX and INT is that FIX does not return the next lower number 
for negative X. 

FRE(O) 

FRE ( " ") 

Arguments to FRE are dummy arguments. FRE returns the number 
of bytes in memory not being used by BASIC. 

FRE(0) returns the number of bytes in memory which can be used 
for BASIC programs, text files, and machine language program 
files. FRE(" ") returns the number of bytes in memory for 
string space. 

HEX$(X) 

Returns a string which represents the hexadecimal value of the 
decimal argument. The numeric expression, n, must be between 
-32768 and 65535. If n is negative, the two's complement form 
is used. That is, HEX$(-n)is the same as HEX$(65536-n). 

INKEY$ 

Returns either a one-character string containing a character 
read from the keyboard or a null string if no key is pressed. 
No characters will be echoed and all characters are passed 
through to the program, except for Control-STOP, which 
terminates the program. 

INPUT? (X) 

Returns a string of X characters, read from the keyboard. No 
character will be echoed and all characters are passed through, 
except for Control-STOP, which terminates the program. 

INSTR([I,]X$,Y$) 

Searches for the first occurrence of string Y$ in X$ and 
returns the position at which the match is found. the optional 


80 




USX BASIC REFERENCE GUIDE 


offset I sets the position for starting the search. I must be 
in the range 0 to 255. If I>LEN(X$) or if X$ is null or if Y$ 
cannot be found or if X$ and Y$ are null, INSTR returns 0. If 
only Y$ is null, INSTR returns I or 1. X$ and Y$ may be 
string variables, string expressions, or string literals. 

INT(X) 

Returns the largest integer <=X. 

LEFT $ (X $, I) 

Returns a string comprising the leftmost I characters of X$. 
I must be in the range 0 to 255. If I is greater than LEN(X$), 
the entire string (XS) is returned. If 1=0, a null string 
(length zero) is returned. 

LEN(X $) 

Returns the number of characters in X$. Nonprinting characters 
and blanks are counted. 

LOG (X) 

Returns the natural logarithm of X, X being greater than zero. 
LPOS(X) 

Returns the current position of the line printer print head 
within the line printer buffer, not necessarily giving the 
physical position of the print head. X is a dummy argument. 

MID$(X$,II,j]) 

Returns a string of length J characters from X$ beginning with 
the Ith character. I and J must be in the range 1 to 255. If 
J is omitted or if there are fewer than J characters to the 
right of the Ith character, all rightmost characters beginning 
with the Ith character are returned. If I>LEN(X$), MID$ 
returns a null string. 

0CT$ (n) 

Returns a string which represents the octal value of the 
decimal argument. 

The numeric expression, n, must be between -32768 and 65535. If 
n is negative, the two’s complement form is used, for example, 
OCT $(-n) is the same as OCT$(65536-n). 

PEEK (I) 

Returns the byte (decimal integer in the range 0 to 255) read 
from memory location I. I must be in the range -32768 to 65535. 
PEEK is the complementary function to the POKE statement. 

POS(I) 

Returns the current cursor position. The leftmost position is 
0. I is a dummy argument. 

RIGHT? (X $, I) 

Returns the rightmost I characters of string X$. If I=LEN(X$), 
return X?. If 1-0, a null string (length zero) is returned. 


81 



MSX BASIC REFERENCE GUIDE 


RND(X) 

Returns a random number between 0 and 1. The same sequence of 
random number is generated each time the program is RUN. If 
X<0, the random generator is reseeded for any given X. X=0 
repeats the last number generated. X>0 generates the next 
random number in the sequence. 

SGN(X) 

Returns 1 (for X>0), 0 (for X=0), -1 (for X<0) . 

SIN(X) 

Returns the sine of X in radians. SIN(X) is calculated to 
double-precision. 

SPACE$(X) 

Returns the string of spaces of length X. The expression X 
discards the fractional portion and must be range 0 to 255. 

SPC(I) 

Prints I blanks on the screen. SPC may only be used with PRINT 
and LPRINT statements. I must be in the range 0 to 255. 

SQR(X) 

Returns the square root of X. X must be >=0. 

STR$(X) 

Returns a string representation of the value of X. 

STRING $(I,J) 

STRING $ (I, X$) 

Returns a string of length I whose characters all have ASCII 
code J or the first character of the string X$. 

TAB(I) 

Spaces to position I on the console. If the current print 
position is already beyond space I, TAB does nothing. Space 
0 is the leftmost position, and the rightmost position is the 
width minus one. I must be in the range 0 to 255. TAB may only 
be used with PRINT and LPRINT statements. 

TAN(X) 

Returns the tangent of X in radians. TAN(X) is calculated to 
double precision. If TAN overflows, an 'Overflow' error will 
occur. 

USRl<digit>](X) 

Calls the user's assembly language subroutine with the argument 
X. <digit> is in the range 0 to 9 and corresponds to the digit 
supplied with the DEFUSR statement for that routine. If <digit> 
is omitted, USRO is assumed. 

VAL(X $) 

Returns the numerical value of the string X$. The VAL function 
also strips leading blanks, tabs, and linefeeds from the 


82 



USX BASIC REFERENCE GUIDE 


argument string. The following is an example. 

PRINT VAL(" -7") 

-7 

Ok 

VARPTR(<variable name>) 

VARPTR(#<file number>) 

Returns the address of the first byte of data identified with 
<variable name>. A value must be assigned to <variable name> 
prior to execution of VARPTR. Otherwise, an 'Illegal function 
call' error results. Any type of variable name may be used 
(numeric, string, array), and the address returned will be 
an integer in the range -32768 to 32767. If a negative address 
is returned, add it to 65536 to obtain the actual address. 

VARPTR is usually used to obtain the address of a variable or 
array so it may be passed to a machine language subroutine. 
A function call of the form VARPTR(A(0)) is usually specified 
when passing an array, so that the lowest-address element of 
the array is returned. 

All simple variables should be assigned before calling VARPTR 
for an array because the address of the arrays change whenever 
a flaw simple variable is assigned. If #<file number> is 
specified, VARPTR returns the starting address of the file 
control block. 


83 



MSX BASIC REFERENCE GUIDE 


- Expanded Statements and Functions for MSX - 

2.1.13 Device Specific Statements 

SCREEN [<mode>l t,<sprite size>H,<key click switch>] 

[,<cassette baud rate>][,<printer option>] 

Assigns the screen mode, sprite size, key click, cassette baud 
rate, and printer option. 

<mode> should be set to 0 to select 40x24 text mode, 1 to 
select 32x24 text mode, 2 to select high resolution mode, 3 
to select multi-color (low-resolution mode). 


0: 40x24, text mode 

1: 32x24, text mode 

2: high-resolution mode 

3: multi-color mode 


<sprite size> determines the size of sprite. Should be set to 
0 to select 8x8 unmagnified sprites, 1 to select 8x8 magnified 
sprites, 2 to select 16x16 unmagnified sprites, 3 to select 
16x16 magnified sprites. NOTE: If <sprite size> is specified, 
the contents of SPRITE? will be cleared. 


0: 8x8, unmagnified 

1: 8x8, magnified 

2: 16x16, unmagnified 

3: 16x16, magnified 

<key click switch> determines whether to enable or disable the 
key click. Should be set to 0 to disable it. 

0: disable key click 
non-zero: enable key click 


Note that in text mode, all graphics statements except PUT 
SPRITE' qenerate an 'Illegal function call' error. Note also 
that the mode is forced to text mode when an 1 INPUT statement 
is encountered or BASIC returns to command level. 


<cassette baud rate> determines the default baud rate for 
succeeding write operations, 1 for 1200 baud, and 2 for 2400 
baud. The baud rate can also be determined using CSAVE command 
with baud rate option. 


Note that when reading cassette, the baud rate is automatically 
determined, so that users do not need to know the baud rate 
the cassette is written. <printer option> determines if the 
printer in operation is 'MSX printer' (which has 'graphics 
symbol' and 'Hiragana' capability) or not. Should be non 0 if 
the printer does not have such capability. In this case. 


84 




HSX BASIC REFERENCE GUIDE 


graphics symbols are converted to spaces, and Hiragana 
are converted to Katakana in the Japanese version. 

WIDTH <width of screen in text mode> 

Sets the width of the display during text mode. Valid values 
are 1 to 40 in 40x24 text mode, and 1 to 32 in 32x24 text mode. 


CLS 

Clears the screen. Valid in all screen modes. 

LOCATE [<x>][,<y>][,<cursor display switch>] 

Locates character the position for PRINT. <cursor display 
switch> can be specified only in text mode. 

0: Disable the cursor display 
1: Enable the cursor display 

COLOR Kforeground color >][, -(background color>] [ ,<border color>] 
Defines the color, the default being 15,4,7 in the Japanese 
version. Refer to 5.4 for other versions. The argument can be 
in the range of 0 to 15. The color correspondences follow. 

0 Transparent 

1 Black 

2 Medium green 

3 Light green 

4 Dark blue 

5 Light blue 

6 Dark red 

7 Cyan 

8 Medium red 

9 Light red 

10 Dark yellow 

11 Light yellow 

12 Dark green 

13 Magenta 

14 Gray 

15 White 

PUT SPRITE <sprite plane number>[,<coordinate specifier>] 

[,<color>][,<pattern number>] 

Sets up sprite attributes. 

<sprite plane number> may range from 0 to 31. 

<coordinates specifier> always ca come in one of two forms: 

STEP { x offset, y offset) or 
( absolute x, absolute y) 

The first form is a point relative to the most recent point 
referenced. The second, more common, form is directly refers 
to a point without regard to the last point referenced. 
The foilwing are some examples. 


85 



MSX BASIC REFERENCE GUIDE 


(10,10) absolute form 

STEP (10,0) offset 10 in x and 0 in y 

(0,0) origin 

Note that when BASIC scans coordinate values it will allow them 
to be beyond the edge of the screen, however values outside the 
integer range (-32768 to 32767) will cause an overflow error. 
And the values outside of the screen will be substituted with 
the nearest possible value. For example, 0 for any negative 
coordinate specification. 

Note that (0,0) is always the upper left-hand corner. Although 
numbering y at the top causes the bottom left corner to be 
(0,191) in both high- and medium-resolution, this is standard. 

The above description can be applied wherever graphic 

coordinates are used. 

The X coordinate <x> may range from -32 to 255. The Y 

coordinate <y> may range from -32 to 191. If 208 (&HD0) is 
given to <y>, all sprite planes behind disappears until a value 
other than 208 is given to that plane. If 209 (&HD1) is 
specified to <y>, that sprite disappears from the screen. 
Refer to the VDP manual for further details. 

When a field is omitted, the current value is used. At start 
up, the color defaults to the current foreground color. 

<pattern number> specifies the pattern of sprite, and must be 
less than 256 when size of sprites if 0 or 1, and must be less 

than 64 when the size of sprites is 2 or 3. <pattern number> 

defaults to the <sprite plane number>. See also the SCREEN 
statement and the SPRITES variable. 

CIRCLE Coordinate specif ier>,<radius> [, <color>] 

[,<start angle>][,<end angle>l[,<aspect ratio>] 

Draws an ellipse with a center and radius as indicated by the 
first of its arguments. 

Coordinate specifier> specifies the coordinate of the center 
of the circle on the screen. For details on Coordinate 
specifier)*, see the description of the PUT SPRITE statement. 

The <color> defaults to foreground color. 

The <start angle> and <end angle> parameters are radian 
arguments between 0 and 2*PI which allow you to specify where 
drawing of the ellipse will begin and end. If the start or end 
angle is negative, the ellipse will be connected to the center 
point with a line, and the angles will be treated as if they 
were positive. Note that this is different than adding 2*PI. 

The <aspect ratio is for horizontal and vertical ratio of the 
ellipse. 


86 



MSX BASIC REFERENCE GUIDE 


DRAW <string expression> 

Draws figure according to the graphic macro language. 

The graphic macro language commands are contained in the string 
expression string. The string defines an object, drawn when 
BASIC executes the DRAW statement. During execution, BASIC ex¬ 
amines the value of string and interprets single-letter com¬ 
mands from the contents of the string. These commands are des¬ 
cribed in detail below: 

The following movement commands begin movement from the last 
point referenced. After each command, last point referenced 
is the last point the command draws. 


u 

n 

Moves 

up 


D 

n 

Moves 

down 


L 

n 

Moves 

left 


R 

n 

Moves 

right 


E 

n 

Moves 

diagonally 

up and right 

F 

n 

Moves 

diagonally 

down and right 

G 

n 

Moves 

diagonally 

down and left 

H 

n 

Moves 

diagonally 

up and left 


The n in each of the preceding commands indicates the distance 
to move. The number of points moved is n times the scaling 
factor set by the S command. 

M x,y Moves absolute or relative. If x has a plus 
sign(+) or a minus sign(-) in front of it, it 
is relative. Otherwise, it is absolute. 

The aspect ratio of the screen is 1. Thus, 8 horizontal points 
are equal to 8 vertical points. 

The following two prefix commands may precede any of the above 
mov em ent commands. 

B Moves, but doesn't plot any points. 

N Moves, but returns to the original position 

when finished. 

The following commands are also available: 

A n Sets angle n. n may range from 0 to 3, where 

0 is 0 degrees, 1 is 90, 2 is 180, and 3 is 270. 


0 



2 


C n Sets color n, being between 0 and 15. 


87 



MSX BASIC REFERENCE GUIDE 


S n Sets the scale factor, n being betwen 0 and 255. 

The scale factor is n/4. For example, if n = 1, 
the scale factor is 1/4. The scale factor is 
multiplied by the distance given with U,D, L,R, E, 
F,G,and H; and relative M commands give the dis¬ 
tance moved. The default value is 0, meaning 'no 
(i.e. , it is the same as S4) . 

X<string variable>: 

Executes substring. This allows you to execute 
a second string from within a string. 

Example A$="U80R80D80L80":DRAW "XA$;" 
->Draws a square 

In all of these commands, the n, x, or y argument can be a 
constant like 123 or it can be 1 =<variable>; 1 where <variable> 
is the name of a numeric variable. The semicolon (;) is 
required if the variable is used this way, or in the X command. 
Otherwise, a semicolon is optional between commands. Spaces 
are ignored in string. For example, variables in a move com¬ 
mand in this way: 


Xl=40:X2=5 0 
DRAW "M+=xl;,-=X2" 

The X command can be a very useful part of DRAW, because you 
can define a part of an object separate from the entire object 
and also can use X to draw a string of commands more than 255 
characters long. 

LINE [Ccoordinate specifier>]-Ccoordinate specifier>[,Ccolor>] 

[ ,<B IBF>] 

Draws a line connecting the two specified coordinate. For the 
details on the Ccoordinate specifier>, see the description of 
the PUT SPRITE statement. 

If 'B 1 is specified, a rectangle is drawn. If 'BF' is speci¬ 
fied, the rectangle is filled. 

PAINT Ccoordinate specifier>[,Cpaint color>][,Cborder color>] 

Fills in a bordered figure with the specified fill color from 
the Ccoordinate specifiers See the description on PUT SPRITE 
for details of the Ccoordinate specifier>. The PAINT statement 
does not allow Ccoordinate specifier> to be off the screen. 

Note that PAINT must not have a border for high-resolution 
graphics, border can be specified only in multicolor mode. In 
high-resolution graphics mode, the paint color is regarded as 
the border color. 

PSETCcoordinate specifier^,Ccolor>] 

PRESETCcoordinate specifier>[,Ccolor>] 


88 



USX BASIC REFERENCE GUIDE 


Sets/resets the specified coordinate. For details of the 
<coordinate specifier>, see the description on PUT SPRITE. 

The only difference between PSET and PRESET is that if no 
<color> is given in PRESET statement, the background color is 
selected. When a <color> argument is given, PRESET is 
identical to PSET. 

KEY <function key #>,<string expression> 

Sets a string to specified function key. <function key #> 
must be in the range 1 to 10. <string expression> must be 
within 15 characters. 

Example: 

KEY 1,"PRINT TIME$"+CHR$ (13) 

A$="Japan" 

KEY 2,A$ 


KEY LIST 

Lists the contents of all function keys. 

Exampl e: 

KEY LIST 

color 

auto 

goto 

list 

run 

color 15,7,7 
cload" 
cont 
list . 

run 

Ok 

"color" corresponds to key "fl", "auto" with "f2", "goto" with 
"f3", and so on. Position in the list reflects the key 
assignments. Note that control characters assigned to function 
keys are converted to spaces. 

KEY ON I OFF 

Turns on/off function key display on 24th line of text screen. 

ON KEY GOSUB <list of line numbers> 

Sets up a line numbers for BASIC to trap to when the function 
keys is pressed. 

Example: 

ON KEY GOSUB 100,200,,400,,500 

When a trap occurs, an automatic KEY(n)STOP is executed so 
receive traps can never take place. The RETURN from the trap 
routine will automatically do a KEY(n)ON unless an explicit 
KEY(n)OFF has been performed inside the trap routine. 


89 



MSX BASIC REFERENCE GUIDE 


Event trapping does not take place when BASIC is not executing 
a program. When an error trap (resulting from an ON ERROR 
statement) takes place this automatically disables all trapping 
(including ERROR, STRIG, STOP, SPRITE, INTERVAL and KEY). 

KEY (<function key #>) ON/OFF/STOP 

Activates/deactivates trapping of the specified function key 
in a BASIC program. 

A KEY(n)ON statement must be executed to activate trapping of 
function key. After a KEY(n)ON statement, if a line number is 
specified in the ON KEY GOSUB statement then every time BASIC 
starts a new statement it will check to see if the specified 
key was pressed. If so, it will perform a GOSUB to the line 
number specified in the ON KEY GOSUB statement. 

If a KEY(n)OFF statement has been executed, no trapping takes 
place and the event is ignored. 

If a KEY(n)STOP statement has been executed, no trapping will 
take place, but if the specified key is pressed, this is 
remembered so trapping is done if KEY(n)ON is executed. 

KEY(n)ON does not affect the function key assignments displayed 
at the bottom of the console. 

ON STRIG GOSUB <list of line numbers> 

Sets up a line numbers for BASIC to trap to when the trigger 
button is pressed. 

Example: 

ON STRIG GOSUB ,200,, 400 

When the trap occurs an automatic STRIG(n)STOP is executed so 
receive traps can never take place. The RETURN from the trap 
routine will automatically do a STRIG(n)ON unless an explicit 
STRIG(n)OFF has been performed inside the trap routine. 

Event trapping does not take place when BASIC is not executing 
a program. When an error trap (resulting from an ON ERROR 
statement) takes place, all trapping (including ERROR, STRIG, 
STOP, SPRITE, INTERVAL and KEY)is automatically disabled. 

STRIG (<n>) ON/OFF/STOP 

Activates or deactivates trapping of joystic trigger buttons in 
BASIC programs. 

<n> can be between 0 and 4. If <n> = 0, the space bar is used 
for a trigger button. If <n> is either 1 or 3, the trigger of a 
joystick 1 is used. When <n> is either 2 or 4, joystick 2 is 
used. 

A STRIG(n)ON statement must be executed to activate trapping 


90 



MSX BASIC REFERENCE GUIDE 


of the trigger button. After an STRIG(n)ON statement is execu¬ 
ted, if a line number is specified in the ON STRIG GOSUB state¬ 
ment, then every time BASIC starts a new statement, it will 
check to see if the trigger button was pressed. If so, it will 
perform a GOSUB to the line number specified in the ON STRIG 
GOSUB statement. 

If a STRIG(n)OFF statement has been executed, no trapping takes 
place and the event is not remembered even if it does take 
place. 

If a STRIG(n)STOP statement has been executed, no trapping will 
take place, but if the trigger button is pressed this is 
remembered so an immediate trap will take place when STRIG(n)ON 
is executed. 

ON STOP GOSUB Cline number> 

Sets up a line numbers for BASIC to trap to when the Control- 
STOP key is pressed. 

When the trap occurs, the STOP STOP statement is executed so 
receive traps can never take place. The RETURN from the trap 
routine will automatically do a STOP ON unless an explicit STOP 
OFF has been performed inside the trap routine. 

Event trapping does not take place when BASIC is not executing 
a program. When an error trap (resulting from an ON ERROR 
statement) takes place, all trapping (including ERROR, STOP, 
STRIG, SPRITE, INTERVAL and KEY) are automatically disabled. 

Use caution when using this statement. For example, the follo¬ 
wing program cannot be aborted, and the only way out is to 
reset the systeml 

10 ON STOP GOSUB 40 
20 STOP ON 
30 GOTO 30 
40 RETURN 


STOP ON/OFF/STOP 

Activates/deactivates trapping of control-STOP. 

A STOP ON statement must be executed to activate trapping of 
a control-STOP. After STOP ON statement, if a line number is 
specified in the ON STOP GOSUB statement, then every time BASIC 
starts a new statement, it will check to see if a control-STOP 
was pressed. If so, it will perform a GOSUB to the line number 
specified in the ON STOP GOSUB statement. 

If a STOP OFF statement has been executed, no trapping takes 

place and the event is not remembered even if it does take 
place. 

If a STOP STOP statement has been executed, no trapping will 
take place. But if a Control-STOP is pressed,this is remembered. 


91 



MSX BASIC REFERENCE GUIDE 


so an immediate trap will take place when STOP ON is executed. 
ON SPRITE GOSUB <line number> 

Sets up a line number for BASIC to trap to when the sprites 
coincide. 

When the trap occurs an automatic SPRITE STOP is executed so 
receive traps can never take place. The RETURN from the trap 
routine will automatically do a SPRITE ON unless an explicit 
SPRITE OFF has been performed inside the trap routine. 

Event trapping does not take place when BASIC is not executing 
a program. When an error trap (resulting from an ON ERROR 
statement) takes place this automatically disables all trapping 
(including ERROR, STRIG, STOP, SPRITE, INTERVAL and KEY). 

SPRITE ON/OFF/STOP 

Activates/deactivates trapping of sprite in a BASIC program. 

A SPRITE ON statement must be executed to activate trapping of 
sprite. After SPRITE ON statement, if a line number is 
specified in the ON SPRITE GOSUB statement then every time 
BASIC starts a new statement it will check to see if the 
sprites coincide. If so, it will perform a GOSUB to the line 
number specified in the ON SPRITE GOSUB statement. 

If a SPRITE OFF statement has been executed, no trapping takes 
place and the event is not remembered even if it does take 
place. 

If a SPRITE STOP statement has been executed, no trapping will 
take place. But if the sprites coincide, this is remembered so 
an immediate trap will take place when SPRITE ON is executed. 

ON INTERVAL=<time interval> GOSUB <line number> 

Sets up a line number for BASIC to trap to time interval. 

Generates a timer interrupt every <time interval>/60 second. 

When the trap occurs an automatic INTERVAL STOP is executed so 
receive traps can never take place. The RETURN from the trap 
routine will automatically do a INTERVAL ON unless an explicit 
INTERVAL OFF has been performed inside the trap routine. 

Event trapping does not take place when BASIC is not executing 
a program. When an error trap (resulting from an ON ERROR 
statement) takes place this automatically disables all traps 
(including ERROR, STRIG, STOP, SPRITE, INTERVAL and KEY). 

INTERVAL ON/OFF/STOP 

Activates/deactivates trapping of time intervals. 

A INTERVAL ON statement must be executed to activate trapping 
of time interval. After INTERVAL ON statement, if a line 
number is specified in the ON INTERVAL GOSUB statement, then 


92 



MSX BASIC REFERENCE GUIDE 


every time BASIC starts a new statement it will check the time 
interval. if so, it will perform a GOSUB to the line number 
specified in the ON INTERVAL GOSUB statement. 

If a INTERVAL OFF statement has been executed, no trapping 
takes place and the event is not remembered even if it does 
take place. 

If a INTERVAL STOP statement has been executed, no trapping 
will take place. But if the timer interrupt occurs, this is 
remembered so an immediate trap will take place when INTERVAL 
ON is executed. 

VPOKE <address of VRAM>,<value to be written> 

Pokes a value to specified location of VRAM. <address of VRAM> 
can be between 0 and 16383. <value to be written> should be a 
byte value. 

BEEP 

Generates a beep sound, as for the output of CHR$(7). 

MOTOR [<ONI0FF>] 

Changes the status of cassette motor switch. When no argument 
is given, flips the motor switch. Otherwise, enables/disables 
motor of cassette. 

SOUND <register of PSG>,<value to be written> 

Writes value directly to the <register of PSG>. 

PLAY <string exp for voice l>[,<string exp for voice 2> 

[,<string exp for voice 3>]] 

Plays music according to the music macro language. 

PLAY implements a concept similar to DRAW by embedding a "music 
macro language" into a character string. <string exp for voice 
n> is a string expression consisting of single character music 
commands. When a null string is specified, the voice channel 
remains silent. The single character commands in PLAY are: 

A to G with optional #,+,or - 

Plays the indicated note in the current octave. 
A number sign(#) or plus sign(+) afterwards 
indicates a sharp, a minus sign(-) indicates 
a flat. The #,+, or - is not allowed unless 
it corresponds to a black key on a piano. For 
example, B# is an invalid note. 

0 n Octave. Sets the current octave for the 

following notes. There are 8 octaves, numbered 
1 to 8. Each octave goes from C to B. Octave 
4 is the default octave. 

N n Plays note n. n may range from 0 to 96. n=0 

means rest. This is an alternative way of 


93 



MSX BASIC REFERENCE GUIDE 


L n 


R n 


T n 


V n 


M n 


S n 


selecting notes besides specifying the octave(0 
n) and the note name (A-G). (The C of octave 
4 is 36.) 

Sets the length of the following notes. The 
actual note length is 1/n. n may range from 
1 to 64. The following table may help explain 
this: 

Length Equivalent 

LI Whole note 

L2 Half note 

L3 One of a triplet of three 

half notes (1/3 of a 4 beat 

measure) 

L4 Quarter note 

L5 One of a quintuplet (1/5 

of a measure) 

L6 One of a quarter note triplet 


L64 Sixty-forth note 


The length may also follow the note when you 
want to change the length only for the note. 


For example, 
default is 4 

A16 is 

• 

equivalent 

to L16A. 

The 

Pause (rest) 

. n may 

range from 

1 to 64, 

and 

figures the 

length 

of the pause 

in the 

same 


way as L(length). The default is 4. 

(Dot or period) After a note, causes the note 
to be played as a dotted note. That is, its 
length is multiplied by 3/2. More than one 
dot may appear after the note, l/(2~n) is added 
per one dot. For example, "A..." will play 
15/8 as long, etc. Dots may also appear after 
the pause(P) to scale the pause length in the 
same way. 

Tempo. Sets the number of quarter notes in 
a minute, n may range from 32 to 255. The 
default is 120. 

Volume. Sets the volume of output, n may range 
from 0 to 15. The default is 8. 

Modulation. Sets period of envelope. n may 
range from 1 to 65535. The default is 255. 

Shape. Sets shape of envelope. n may range 
from 1 to 15. The default is 1. The pattern 
set by this command are as follows: 


94 



USX BASIC REFERENCE GUIDE 


• WM 
*• NAAAA 

■■ \f-' 

» A/wwm 


13 


14 


/ - 

AWV 


X<variable>; 

/Executes specified string. 

In all of these commands, the n argument can be a constant like 

s 2 <ra r - can b !L" ~ <var iable>f " where variable is the name of 
a variable. The semicolon(;> is required when you use a 
variable in this way, and when you use the X command. 

erwise ' a semicolon is optional between commands. Note that 
the values specified in the above commands will be reset to the 
system default when a beep sound is generated* 


MAXFILES=<expression> 

Specifies the maximum number of files opened at a time. 


95 



MSX BASIC REFERENCE GUIDE 


<expression> can be in the range of 0 to 15. When l MAXFILES=0' 
is executed, only SAVE and LOAD can be performed. The default 
value assigned is 1. 

OPEN "<device_descriptor>[<file name>]" [FOR <mode>] 

AS [#3<file number> 

Allocates a buffer for I/O and set the mode that will be used 
with the buffer. 

This statement opens a device for further processing. 

Currently, the following devices are supported. 

CAS: Cassette 

CRT: CRT screen 

GRP: Graphic screen 

LPT: Line printer 

Device descriptors can be added using the ROM cartridge. See 
section 2.2.3 for further details. 

<mode> is one of the following: 

OUTPUT : Sequential output mode 
INPUT : Sequential input mode 
APPEND : Sequential append mode 

<file number> is an integer expression whose value is between 
one and the maximum number of files specified in a MAXFILES= 
statement. 

<file number> is the number that is associated with the file 
for as long as it is OPEN and is used by other I/O statements 
to refer to the file. 

An OPEN must be executed before any I/O may be done to the file 
using any of the following statements, or any statement or 
function requiring a file number: 

PRINT #, PRINT # USING 
INPUT #, LINE INPUT # 

INPUT?, GET, PUT 

PRINT #<£ile number>,<exp> 

PRINT #<file number>,USING <string expression^-<list of expression> 
Writes data to the specified channel. Refer to the PRINT and 
PRINT USING statements for details. 

INPUT #<file number>,<variable list> 

Reads data items from the specified channel and assigns them to 
program variables. 

The type of data in the file must match the type specified by 
the <variable list>. Unlike the INPUT statement, no question 
mark is printed with INPUT# statement. 


96 



USX BASIC REFERENCE GUIDE 


The data items in the file should appear just as they would if 
data were being typed in response to an INPUT statement. With 
numeric values, the leading spaces, carriage returns, and line 
feeds are ignored. The first character encountered that is not 
a space, carriage return, or line feed is assumed to be start 
of a number. The number terminates on a space, carriage 
return, line feed, or comma. 

Also, if BASIC is scanning the data for a string item, leading 
spaces, carriage returns, and line feeds are ignored. The first 
character encountered that is not a space, carriage return, or 
line feed is assumed to be the start of a string item. If this 
first character is a double-quotation mark ("), the string item 
will consist of all characters read between the first quotation 
mark and the second. Thus, a quoted string may not contain a 
quotation mark as a character. 

If the first character of the string is not a quotation mark, 
the string is an unquoted string, and will terminate on a 
comma, carriage return, line feed, or after 255 characters 
have been read. If end of file is reached when a numeric or 
string item is being INPUT, the item is terminated. 

LINE INPUT #<file number>,<string variable> 

Reads an entire line (up to 254 characters), without delimiters, 
from a sequential file to a string variable. 

<file number> is the number which the file was OPENed. 

<string variable> is the name of a string variable to which the 
line will be assigned. 

LINE INPUT# reads all characters in the sequential file up to 
a carriage return. It then skips over the carriage return/line 
feed sequence, and the next LINE INPUT# reads all characters 
up to the next carriage return. (If a line feed/carriage return 
sequence is encountered, it is preserved. That is, the line 
feed/carriage return characters are returned as part of the 
string.) 

LINE INPUT# is especially useful if each line of a file has 
been broken into fields, or if a BASIC program saved in ASCII 
mode is being read as data by another program. 

INPUTS(n,E#J<file number>) 

Returns a string of n characters, read from the file. <file 
number> is the number which the file was OPENed. 

CLOSE [[#]<file number>[,<file number>]] 

Closes the channel and releases the buffer associated with it. 
If no <file number> is specified, all open channels are closed. 

SAVE "<device descriptor>[<file name>]" 

Saves a BASIC program file to the device. Control-Z is treated 
as end-of-file. 


97 



MSX BASIC REFERENCE GUIDE 


LOAD "<device_descriptor>[<file name>]" 

Loads a BASIC program file from the device. 

LOAD closes all open files and deletes the current program from 
memory. However, with the "R n option, all data files remain 
OPEN and execute the loaded program. 

If the <file name> is omitted, the next program, which should 
be an ASCII file, encountered on the tape is loaded. Control-2 
is treated as end-of-file. 

MERGE "<device descriptor>Kfile name>]" 

Merges the lines from an ASCII program file into the program 
currently in memory. 

If any lines in the file being merged have the same line number 
as lines in the program in memory, the lines from the file will 
replace the corresponding lines in memory. 

After the MERGE command, the MERGEd program resides in memory, 
and BASIC returns to command level. 

If <file name> is omitted, the next program file, which should 
be in ASCII format, encountered on cassette tape is MERGEd. A 
Control-Z is treated as end-of-file character. 

BSAVE "<device descriptor>[<file name>]",<top adrs>,<end adrs> 
[,<execution adrs>] 

Saves a memory image at the specified memory location to the 
device. (Currently, only CAS: is supported.) 

<top adrs> and <end adrs> are the top address and the end 
address of the area to be saved. 

If <execution adrs> is omitted, <top adrs> is regarded as 
<execution adrs>. 

Examples: 

BSAVE "CASiTEST",&HA000,&HAFFF 
BSAVE "CAS :GAME", &HE000 , &HE0FF, &HE020 

BLOAD "<device_de script or > Kf ile name>]"[,R1I,<offset>] 

Loads a machine language program from the specified device. 
(Currently only CAS: is supported.) 

If R option is specified, after the loading, program begins 
execution automatically from the address which is specified at 
BSAVE. 

The loaded machine language program will be stored at the 
memory location which is specified at BSAVE. If <offset> is 
specified, all addresses which are specified at BSAVE are 
offset by that value. 


98 



MSX BASIC REFERENCE GUIDE 


If the <file name> is omitted, the next machine language 
program file encountered is loaded. 

CSAVE "<f ile name>"[,<baud rate>] 

Saves a BASIC program in binary format on cassette tape. 

BASIC saves the file in a compressed binary (tokenized) format. 
ASCII files take up more space, but some types of access 
require that files be in ASCII format. For example, a file 
to be later MERGEd must be saved in ASCII format. Programs 
saved in ASCII may be read as BASIC data files and text files. 
Use the SAVE command instead for ASCII format. 

<baud rate> is a parameter from 1 to 2, which determines the 
default baud rate for every cassette write operations. 1 for 
1200 baud, 2 for 2400 baud. The default baud rate can also be 
set with SCREEN statement. 

CLOAD [ n <file name>"] 

Loads a BASIC program file from the cassette tape. 

CLOAD closes all open files and deletes the current program 
from memory. If the <file name) is omitted, the next program 
file encountered on the tape is loaded. For all cassette read 
operations, the baud rate is determined automatically. 

CLOAD? ["<file name>"] 

Checks if the program on cassette matches the one in memory. 

CALL Cname of expanded statements Uargument list>)] 

Invokes an expanded statement supplied by ROM cartridge. See 
section 2.2.3 for further details. is an abbreviation for 

'CALL', so the next 2 statements have the same meaning. 

CALL TALK ("Yamashita","Hayashi","Suzuki GSX400FW") 
_TALK(" Yamashita", "Hayashi", "Suzuki GSX400FW") 


99 



MSX BASIC REFERENCE GUIDE 


2.1.14 I/O Functions 

POINTKX coordinated<Y coordinated 

Returns the color of a specified pixel. 

VPEEK Kaddress of VRAM>) 

Returns a value of VRAM specified. <address of VRAM> can be 
in the range of 0 to 16383. 

STICK(<n>) 

Returns the direction of a joystick. <n> can be in the range 
of 0 to 2. If <n>=0, the cursor key is used as a joystick. If 
<n> is either 1 or 2, the joystick connected to proper port 
is used. When neutral, 0 is returned. Otherwise, the value 
corresponding to direction is returned. 

\i/ 

7 -o-3 

/l\ 

5 


STRIG (< n >) 

Returns the status of a trigger button of a joystick. <n> can 
be in the range of 0-4. If <n>=0, the space bar is used for 
a trigger button. If <n> is either 1 or 3, the trigger of a 
joystick 1 is used. When <n> is either 2 or 4, joystick 2. 
0 is returned if the trigger is not being pressed, -1 is 
returned otherwise. 


PDL(<n>) 

Returns the value of a paddle. <n> can be in the range of 
1 to 12. If <n> is either 1, 3, 5, 7, 9 or 11, the paddle 
connected to port 1 is used. When 2, 4, 6, 8, 10 or 12, 
the paddle connected to port 2 is used. 


PAD(<n>) 

Returns various status of touch pad. <n> can be in the range 
of 0 to 7. 


When 0 to 3 is specified, the touch pad connected to joystick 
port 1 is selected, if between 4 to 7, port 2 is selected. 

When <n>=0 or 4, the status of touch pad is returned, -1 when 
touched, 0 when released. 


When <n>=l or 5, the X-coordinate is returned, when <n>=2 or 
6, Y-coordinate is returned. 

When <n>=3 or 7, the status of switch on the pad is returned. 


100 



MSX BASIC REFERENCE GUIDE 


-1 when being pushed, 0 otherwise. 

Note that coordinates are valid only when PAD(O) (or PAD(4)) 
is evaluated. When PAD(O) is evaluated, PAD (5) and PAD (6) are 
both affected, and when PAD(4), PAD(l) and PAD(2). 

PLAY(<play channel>) 

Returns the status of a music queue. <n> can be in the range 
of 0-3. If <n>=0, all 3 status are ORed and returned. If <n> 
is either 1,2 or 3, -1 is returned if the queue is still in 
operation, i.e., still playing. 0 is returned otherwise. Note 
that immediately after the PLAY statement is issued, the PLAY 
function returns -1 regardless of the actual status of the 
music queue. 


EOF(<file number>) 

Returns -1 (true) if the end of a sequential file has been 
reached. Otherwise, returns 0. Use EOF to test for end-of-file 
while INPUTing, to avoid 'Input past end' errors. 


101 



MSX BASIC REFERENCE GUIDE 


2.1.15 Special Variables 

The following are special variables for MSX. When assigned, the 
content is changed, when evaluated, the current value is returned. 

TIME (type: unsigned integer) 

The system internal timer. TIME is automatically incremented 
by 1 everytime VDP generates interrupt (60 times per second), 

thus, when an interrupt is disabled (for example, when 

manipulating cassette), it retains the old value. 

SPRITE $(<pattern number>) (type: string) 

The sprite pattern. 

<pattern number> must be less than 256 when size of sprites is 
0 or 1, less than 64 when size of sprites is 2 or 3. 

The length of this variable is fixed to 32 (bytes). So, if 

a string that is shorter than 32 character is assigned, the 

CHR$(0)s are added. 

Example: 

list 

100 SCREEN 3,3 

110 A$=CHR$ (1) +CHR$ (3) +CHR$(7) +CHR$ (&HF) +CHR$ (&H1F) 

+CHR$(&H3F)+CHR$(&H7F)+CHR$(&HFF) 

120 SPRITE $(1) =A$ 

13 0 SPRITE $(2) =A$+A$ 

140 SPRITES(3) =A$+A$+A$ 

150 SPRITE $(4) =A$+A$+A$+A$ 

160 PUT SPRITE 1,(20,20) ,15 
170 PUT SPRITE 2,(60,20 ,15 
180 PUT SPRITE 3,(100,20 ,15 
190 PUT SPRITE 4,(140,20 ,15 
200 GOTO 200 
Ok 
run 

****************************************************************** 

* NOTE * 

* The following two are system variables which can be evaluated * 

* or assigned like other ordinary variables. Prepared for * 

* advanced programmers only. If you do not understand their * 

* usage fully, please do not use them. * 

* * 

****************************************************************** 

VDP(<n>) (type: unsigned byte) 

If <n> is between 0 to 7, VDP(n) specifies the current value of 
the VDP write-only register. If <n> is 8, it specifies the 
status register of the VDP. VDP(8) is read only. 

BASE(<n>) (type: integer) 

Current base address for each table. The description of <n> 
follows next. 


102 



MSX BASIC REFERENCE GUIDE 


0 - Base of name table for text mode. 

1 - Undefined 

2 - Base of pattern generator table for text mode. 40 * 24 

3 - Undefined 

4 - Undefined _ 

5 - Base of name table for text mode. 

6 - Base of color table for text mode. 

7 - Base of pattern generator table for text mode. 32 * 24 

8 - Base of sprite attribute table for text mode. 

9 - Base of sprite pattern table for text mode. _ 

10 - Base of name table for high-resolution mode. 

11 - Base of color table for high-resolution mode. 

12 - Base of pattern generator table for high-resolution mode. 

13 - Base of sprite attribute table for high-resolution mode. 

14 - Base of sprite pattern table for high-resolution mode. 

15 - Base of name table for multi-color mode. 

16 - Undefined 

17 - Base of pattern generator table for multi-color mode. 

18 - Base of sprite attribute table for multi-color mode. 

19 - Base of sprite pattern table for multi-color mode. 


103 



MSX BASIC REFERENCE GUIDE 


2.1.16 Machine Dependent Statements and Functions 

**********************lci,ici c ic*****-k**-k1fk**ic************************* 

* NOTE * 

* The following statements and functions access the system's * 

* I/O port directly. Programs that use those statements and * 

* functions will thus not be compatible with MSX systems * 

* released in the future. Programs distributed to the public * 

* should not use those statements and functions. * 

* * 

OUT <port number>,Cinteger expression> 

Sends a byte to a machine output port. 

<port number> and Cinteger expression> are in the range 0 to 
255. Cinteger expression> is the data byte to be transmitted. 

WAIT Cport number>,I[,J] 

Suspends program execution while monitoring the status of a 
machine input port. 

The WAIT statement causes execution to be suspended until a 
specified machine input port develops a specified bit pattern. 
The data read at the port is exclusive OR 1 ed with the integer 
expression J, and then is AND'ed with integer expression I. If 
the result is zero, BASIC loops back and reads the data at the 
port again. If the result is non-zero, execution continues with 
the next statement. If j is omitted, it is assumed as zero. 

INPKport number>I) 

Returns the byte read from the port I. I must be in the range 
0 to 255. INP is the complementary function to the OUT 
statement. 


NOTE 

In the above statements and functions, Cport number> is handled 
with a 16-bit number to support the Z-80 capability to access 
I/O ports with the [BC] register pair, however, standard MSX 
systems do not support these extended I/O address spaces, and 
port numbers larger than 255 are undefined. 


104 



MSX BASIC REFERENCE GUIDE 


2.1.17 Summary of Error Codes and Error Messages 


Code Message 


1 NEXT without FOR 

A variable in a NEXT statement does not 
correspond to any previously executed, unmatched 
FOR statement variable. 

2 Syntax error 

A line is encountered that contains some 
incorrect sequence of characters (such as 
unmatched parenthesis, misspelled command or 
statement, incorrect punctuation, etc.) 

3 RETURN without GOSUB 

A RETURN statement is encountered for which 
there is no previous, unmatched GOSUB statement. 

4 Out Of DATA 

A READ statement is executed when there are 
no DATA statement with unread data remaining 
in the program. 

5 Illegal function call 

A parameter that is out of the range is passed 
to a math or string function. An FC error 
may also occur due to the following causes: 

1. A negative or unreasonably large subscript. 

2. A negative or zero argument with LOG. 

3. A negative argument to SQR. 

4. An improper argument to MID?, LEFT$, RIGHT?, 
INP, OUT, PEEK, POKE, TAB, SPC, STRING?, 
SPACE?, INSTR? or ON...GOTO. 

6 Overflow 

The result of a calculation is too large to 
be represented in BASIC's number format. 

7 Out of memory 

A program is too large, has too many files, 
has too many FOR loops or GOSUBs, too many 
variables, or expressions that are too 



compl icated. 



8 

Undefined line number 

A line reference 

IF. .. THEN. .. ELSE is to 

in a GOTO, 

a nonexistent 

GOSUB, 
1 ine. 


105 



MSX BASIC REFERENCE GUIDE 


9 Subscript out of range 

An array element is referenced either with 
a subscript that is outside the dimensions 

of the array, or with the wrong number of 
subscripts. 

10 Redimensioned array 

Two DIM statements are given for the same array, 
or DIM statement is given for an array after 
the default dimension of 10 has been established 
for that array. 

11 Division by zero 

A division by zero is encountered in an 

expression, or the operation of involution 
results in zero being raised to a negative 
power. 

12 Illegal direct 

A statement that is illegal in direct mode 
is entered as a direct mode command. 

13 Type mismatch 

A string variable name is assigned a numeric 
value or vice versa; a function that expects 
a numeric argument is given a string argument 
or vice versa. 

14 Out of string space 

String variables have caused BASIC to exceed 
the amount of free memory remaining. BASIC 
will allocate string space dynamically, until 
it runs out of memory. 

15 String too long 

An attempt is made to create a string more 

than 255 character long. 

16 String formula too complex 

A string expression is too long or too complex. 

The expression should be broken into smaller 
expressions. 

17 Can't continue 

An attempt is made to continue a program that: 

1. has halted due to an error, 

2. has been modified during a break in 
execution, or 

3. does not exist. 

18 Undefined user function 

FN function is called before defining it with 
the DEF FN statement. 


106 



MSX BASIC REFERENCE GUIDE 


19 Device I/O error 

An I/O error occurred on a cassette, printer, 
or CRT operation. It is a fatal error; i.e., 
BASIC cannot recover from the error. 

20 Verify error 

The current program is different from the 

program saved on the cassette. 

21 No RESUME 

An error trapping routine is entered but 

contains no RESUME statement. 

22 RESUME without error 

A RESUME statement is encountered before an 
error trapping routine is entered. 

23 Unprintable error 

An error message is not available for the error 
condition which exists. This is usually caused 
by an ERROR with an undefined error code. 

24 Missing operand 

An expression contained an operator with no 
operand following it. 

25 Line buffer overflow 

An entered line has too many characters. 

26 Unprintable errors 

. These codes have no definitions. These are 

49 reserved for future expansion of BASIC. 

50 FIELD overflow 

A FIELD statement is attempting allocate more 
bytes than were specified for the record length 
of a random file in the OPEN statement. Or, 
the end of the FIELD buffer is encountered 
while doing sequential I/O (PRINT#, INPUT#) to 
a random file. 

51 Internal error 

An internal malfunction has occurred. Report 
to Microsoft the conditions under which the 
message appeared. 

52 Bad file number 

A statement or command references a file with 
a file number that is not OPEN or is out of 
the range of file numbers specified by MAXFILE 
statement. 

53 File not found 

A LOAD, KILL, or OPEN statement references 
a file that does not exist in the memory. 


107 



MSX BASIC REFERENCE GUIDE 


54 File already open 

A sequential output mode OPEN is issued for 
a file that is already open; or a KILL is given 
for a file that is open. 

55 Input past end 

An INPUT statement is executed after all the 
data in the file has been INPUT, or for null 
(empty) file. To avoid this error, use the 
EOF function to detect the end of file. 

56 Bad file name 

An illegal form is used for the file name with 
LOAD, SAVE, KILL, NAME, etc. 

57 Direct statement in file 

A direct statement is encountered while LOADing 


an ASCII format 

file. 

The LOAD 

is 

terminated. 

Sequential I/O only 

A statement to 

random 

access 

is 

issued for 


a sequential file. 

59 File not OPEN 

The file specified in a PRINT#, INPUT#, etc. 
hasn't been OPENed. 

60 Unprintable error 

. These codes have no definitions. Users may 

place their own error code definitions at the 
255 high end of this range. 


108 



MSX BASIC REFERENCE GUIDE 


2.1.18 MSX BASIC Reserved Words 

The following is a list of reserved words used in MSX BASIC. Hote 
that the words with asterisk (*) are reserved for future expansion 
only and not explained anywhere in this book. 


ABS 
AND 
ASC 
*ATTR $ 
ATN 
AUTO 
BASE 
BEEP 
BINS 
BLOAD 
BSAVE 
CALL 
CDBL 
CHR$ 
CINT 
CIRCLE 
CLEAR 
CLOAD 
CLOSE 
CL S 
*CMD 
COLOR 
CONT 

copy 

COS 

CSAVE 

CSNG 

CSRLIN 

CVD 

CVI 

CVS 

DATA 

DEF 

DEFDBL 

DEFINT 

DEFSNG 


DEFSTR 

DELETE 

DIM 

DRAW 

DSKF 

DSKI $ 

DSKO 

ELSE 

END 

EOF 

EQV 

ERASE 

ERL 

ERR 

ERROR 

EXP 

FIELD 

FILES 

FIX 

FN 

FOR 

FPOS 

FRE 

GET 

GO TO 

GOSUB 

GOTO 

HEX? 

IF 

IMP 

INKEY? 

INP 

INPUT 

INSTR 

INT 

*IPL 


KEY 

KILL 

LEFT? 

LEN 

LET 

LFILES 

LINE 

LIST 

LLIST 

LOAD 

LOC 

LOCATE 

LOF 

LOG 

LPOS 

LPRINT 

LSET 

MAX 

MERGE 

MID? 

MKD? 

MKI $ 

MKS ? 

MOD 

MOTOR 

NAME 

NEW 

NEXT 

NOT 

OCT? 

OFF 

ON 

OPEN 

OR 

OUT 

PAD 


PAINT 

PDL 

PEEK 

PLAY 

POINT 

POKE 

POS 

PRESET 

PRINT 

PSET 

PUT 

READ 

REM 

RENUM 

RESTORE 

RESUME 

RETURN 

RIGHT? 

RND 

RSET 

RUN 

SAVE 

SCREEN 

*SET 

SGN 

SIN 

SOUND 

SPACE? 

SPC( 

SPRITE 

SQR 

STEP 

STICK 

STOP 

STR? 

STRIG 


STRING ? 
SWAP 
TAB ( 

TAN 

THEN 

TIME 

TO 

TROFF 

TRON 

USING 

USR 

VAL 

VARPTR 

VDP 

VPEEK 

VPOKE 

WAIT 

WIDTH 

XOR 


109 



ADVANCED PROGRAMMING GUIDE 


2.2 Advanced Programming Guide 


2.2.1 BIOS Entry List 
COMMENT % 

The following Restarts (RSTs 0 through RST 5) are reserved for 
the BASIC interpreter, RST 6 for inter-slot calls, RST 7 for 
hardware interrupt. 

The following notation is used in the descriptions. 


Name 

Name of function 

Function 

Function to be performed 

Entry 

Entry parameters 

Returns 

Returned parameters 

Modifies 

Registers to be modified 

Notes 

(optional) 

Name: 

CHKRAM 

Function: 

Checks RAM and sets slot for command area. 

Entry: 

None 

Returns: 

None 

Modifies: 

All 

Note: 

When done, a jump to INIT must be made for 
further initialization. 

DI 

;For fail safe 

ENTR CHKRAM 

DW CGTABL 

;Address of character generator table 

DB VDP.DR 

;Address of VDP data register (read) 

DB VDP.nw 

;Address of VDP data register (write) 

Name: 

SYNCHR 

Function: 

Checks if the current character pointed by 
HL is the one desired. If not, generates 

’Syntax error', otherwise falls into CHRGTR. 

Entry: 

HL, character to be checked be placed at the 
next location to this RST. 

Returns: 

HL points to next character, A has the 

character. 

Carry flag set if number, Z flag set if end 
of statement. 

Modifies: 

AF, HL 

ENTR SYNCHR 

HOLE 1 

Name: 

RDSLT 


110 





ADVANCED PROGRAMMING GUIDE 


Function: Selects the appropriate slot according to the 

value given through registers, and reads the 
contents of memory from the slot. 

Entry: A: FxxxSSPP 

I Mil 

I I I LJ — Primary slot # (0-3) 

I lj -Secondary slot # (0-3) 

i- i if secondary slot # specified 


; Returns: 

; Modifies: 

; Note: 

} 

000C ENT RDSLT 

HOLE 1 


HL: Address of target memory 
A : Contents of memory 
AF, BC, DE 

Interrupts are disabled automatically 
are never enabled by this routine. 


but 


Name: 
Function: 
Entry: 
Returns: 


Modifies: 


CHRGTR 

Gets next character (or token) from BASIC text 
HL 

HL points to next character, A has the 
character. Carry flag set if number, Z flag 
set if end of statement encountered. 

AF, HL 


0010 ENTR CHRGTR 
HOLE 1 


Name: 

Function: 


Entry: 


Returns: 

Modifies: 

Note: 


WRSLT 

Selects the appropriate slot according to the 
value given through registers, and writes to 
memory. 

A; FxxxSSPP 
I till 

I i I — Primary slot # (0-3) 

I lx - Secondary slot # (0-3) 

L -1 if secondary slot # specified 

HL: Address of target memory 
E : Data to be written 
None 

AF, BC, D 

Interrupts are disabled automatically but 
are never enabled by this routine. 


000C ENT WRSLT 

HOLE 1 


Name; 
Function: 
Entry: 
Returns: 
Modifies: 


OUTDO 


Outputs to the current device. 

A, PTRFIL, PRTFLG 

None 

None 


111 










ADVANCED PROGRAMMING GUIDE 


0018 ENT OUTDO 


CALSLT 

Performs inter-slot call to specified address. 
IY -FxxxSSPP 
(HIGH) I IMI 

I I I *- J — Primary slot # (0-3) 

I lx - Secondary slot # (0-3) 

1 -1 if secondary slot # specified 

IX : Address to call 
None 
None 

Interrupts are disabled automatically but 
never enabled by this routine. Arguments can 
never be passed via the alternate registers of 
the 2-80 or IX and IY. 

001C ENT CALSLT 

HOLE 1 

/ 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

0020 ENTR DCOMPR 

HOLE 1 

/ 

; Name: 

; Function: 


Entry: 


Returns: 
Modifies: 
Note: 


0024 ENT ENASLT 

HOLE 1 

t 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 


GETYPR 

Returns the type of FAC. 

FAC 

Flags 

AF 


ENASLT 

Selects the appropriate slot according to the 
value given through registers, and permanently 
enables the slot. 

A: FxxxSSPP 

I I I I I 

I I I *- J -— Primary slot # (0-3) 

I lx -Secondary slot # (0-3) 

i- 1 if secondary slot # specified 

HL: Address of target memory 

None 

All 

Interrupts are disabled automatically but 
are never enabled by this routine. 


DCOMPR 

Compares HL with DE. 
HL, DE 
Flags 
AF 


HOLE 1 

Name: 
Function: 
Entry: 


Returns: 

Modifies: 

Note: 


112 









ADVANCED PROGRAMMING GUIDE 


0028 ENTR GETYPR 

; The following 5 bytes are reserved to store the MSX version 
; number. The first versions hold 5 zeros. 

HOLE 5 

; Name: CALLF 

; Function: Performs far_call (i.e., inter-slot call) 

; Entry: None 

; Returns: Flags 

; Modifies: AF 

; Note: The calling sequence is as follows. 

• 

• RST 6 

• DB Destination slot 

• DW Destination address 

; For a precise description of the parameters, 

j see CALSLT. 


0030 ENTR CALLF 

HOLE 5 

KEYINT 

Performs hardware interrupt procedures. 
None 
None 
None 

0038 ENTR KEYINT 


Name: 
Function: 
Entry: 
Returns: 
Modifies: 


113 






ADVANCED PROGRAMMING GUIDE 


COMMENT % 

The following routines are used for I/O initialization. 


; Name: INITIO 

* Function: Perforins device initialization. 

; Entry: None 

; Returns: None 

; Modifies: All 

« 

003B ENT INITIO 

; Name: INIFNK 

; Function: Initializes function key strings. 

; Entry: None 

; Returns: None 

; Modifies: All 

« 

003E ENT INIFNK 


114 





ADVANCED PROGRAMMING GUIDE 


COMMENT % 

The following routines are used to access the VDP (TI9918). 


; Name: DISSCR 

; Function: Disables screen display. 

; Entry: None 

; Returns: None 

; Modifies: AF, BC 

0041 ENT DISSCR 

* 

; Name: ENASCR 

; Function: Enables screen display. 

; Entry: None 

; Returns: None 

; Modifies: AF, BC 

0044 ENT ENASCR 

j Name: WRTVDP 

; Function: Writes to the VDP register. 

; Entry: Register # in [C], data in tB] 

; Returns: None 

} Modifies: AF, BC 

0047 ENT WRTVDP 

; Name: RDVRM 

; Function: Reads the VRAM addressed by IHL]. 

; Entry: HL 

; Returns: A 

; Modifies: AF 

004A ENT RDVRM 

t 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

004D ENT WRTVRM 

• 
r 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

• 

0050 ENT SETRD 

; Name: SETWRT 


SETRD 

Sets up the VDP for read. 
HL 

None 

AF 


WRTVRM 

Writes to the VRAM addressed by [HLl. 
HL, A 
None 
AF 


115 









ADVANCED PROGRAMMING GUIDE 


Function: 

Sets 

: Entry: 

HL 

: Returns: 

None 

; Modifies: 

AF 


up the VDP for write. 


0053 


ENT 


SETWRT 


Name: 

Function: 

Entry: 

Returns: 

Modifies: 


FILVRM 

Fills the VRAM with the specified data. 

Address in tHL], length in [BC], data in [Accl 

None 

AF, BC 


0056 


ENT 


FILVRM 


Name: 
Function: 
Entry: 

Returns: 
Modifies: 


LDIRKV 

Moves a VRAM memory block to memory. 

Address of source in [HL], destination in [DE], 
length in [BC]. 

None 

All 


005 


ENT 


LDIRMV 


Name: 
Function: 
Entry: 

Returns: 

Modifies: 


LDIRVM 

Moves block of memory from memory to the VRAM. 
Address of source in [HL], destination in [DE], 
length in [BC]. 

None 

All 


005C 


ENT 


LDIRVM 


Name: 
Function: 
Entry: 
Returns: 
Modifies: 


CHGMOD 

Sets the VDP mode according to SCRMOD. 
SCRMOD (0..3) 

None 

All 


005F 


ENT 


CHGMOD 


CHGCLR 

Changes the color of the screen. 
Foreground color in FORCLR 
Background color in BAKCLR 
Border color in BDRCLR 
None 
All 

0062 ENT CHGCLR 

HOLE 1 


Name: 
Function: 
Entry: 


Returns: 
Modifies: 


Name: 
Function: 
Entry: 


NMI 

Performs non-maskable interrupt procedures. 
None 


116 





ADVANCED PROGRAMMING GUIDE 


0066 


0069 


006C 


006F 


Returns: 

Modifies: 


Name; 

Function: 


None 

None 


CLRSPR 

Initializes all sprites. 
Patterns are set to nulls, 
set to sprite plane number, 
set to foreground color, 


sprite names are 
sprite colors are 
vertical positions 


Entry: 

are set to 209. 

SCRMOD 


Returns: 

None 


Modifies: 

All 


ENT CLRSPR 

Name: 

INITXT 


Function: 

Initializes screen for 

text mode (40*24) 

Entry: 

sets the VDP. 

TXTNAM, TXTCGP 


Returns: 

None 


Modifies: 

All 


ENT INITXT 

Name: 

INIT32 


Function: 

Initializes screen for 

text mode (32*24) 

Entry: 

sets the VDP. 

T32NAM, T3 2CGP, T32C0L, 

T3 2ATR, T32PAT 

Returns: 

None 


Modifies: 

All 


ENT INIT32 

Name: 

INIGRP 


Function: 

Initializes screen for 

high-resolution 

Entry: 

and sets the VDP. 

GRPNAM, GRPCGP, GRPCOL, 

GRPATR, GRPPAT 

Returns: 

None 


Modifies: 

All 


ENT INIGRP 

Name: 

INIMLT 


Function: 

Initializes screen for 

multicolor mode 

Entry: 

sets the VDP. 

MLTNAM, MLTCGP, MLTCOL, 

MLTATR, MLTPAT 

Returns: 

None 


Modifies: 

All 



5 ENT 


INIMLT 


Name: 

Function: 


SETTXT 

Sets the VDP for text (40*24) mode. 


117 




ADVANCED PROGRAMMING GUIDE 


7 Entry: TXTNAM, TXTCGP 

7 Returns: None 

; Modifies: All 

0078 ENT SETTXT 

♦ 

9 

; Name: SETT32 

; Function: Sets the VDP for text (32*24) mode. 

; Entry: T32NAM, T32CGP, T32C0L, T32ATR, T32PAT 

7 Returns: None 

7 Modifies: All 

007B ENT SETT32 

r 

7 Name: 

7 Function: 

; Entry: 

; Returns: 

? Modifies: 

007E ENT SETGRP 

J 

; Name: 

; Function: 

7 Entry: 

; Returns: 

7 Modifies: 

• 

0081 ENT SETMLT 

t 

7 Name: 

? Function: 

? Entry: 

; Returns: 

? Modifies: 

* 

00 84 ENT CALPAT 

f 

} Name: 

; Function: 

? Entry: 

7 Returns: 

; Modifies: 

00 87 ENT CALATR 

/ 

7 Name: GSPSIZ 

? Function: Returns the current sprite size. 

7 Entry: None 

7 Returns: Sprite size (# of bytes) in [Acc] 

7 Carry set if 16*16 sprite in use, otherwise 

7 reset the otherwise. 

7 Modifies: AF 

■ 

00 8A ENT GSPSIZ 


CALATR 

Returns address of sprite attribute table. 
Sprite ID in [Acc] 

Address in [HL] 

AF, DE, HL 


CALPAT 

Returns address of sprite pattern table. 
Sprite ID in [Acc] 

Address in [HL] 

AF, DE, HL 


SETMLT 

Sets the VDP for multicolor mode. 
MLTNAM, MLTCGP, ML T COL, MLTATR, ML T PAT 
None 
All 


SETGRP 

Sets the VDP for high-resolution mode. 
GRPNAM, GRPCGP, GRPCOL, GRPATR, GRPPAT 
None 
All 


118 










ADVANCED PROGRAMMING GUIDE 


; Name: GRPPRT 

; Function: Prints a character on the graphic screen. 

• Entry: Code to output in [Acc] 

; Returns: None 

; Modifies: None 

• 
i 

008D ENT GRPPRT 


119 




ADVANCED PROGRAMMING GUIDE 


COMMENT % 

The following routines are used to access the PSG. 


0090 


00 93 


0096 


0099 


Names 

GICINI 


Function: 

Initializes PSG, and static data for 
statement. 

Entry: 

None 


Returns: 

None 


Modifies: 

All 


ENT GICINI 

Name: 

WRTPSG 


Function: 

Writes data to the PSG register. 


Entry: 

Register number in [Acc], data in 

[E] 

Returns: 

None 


Modifies: 

None 


ENT WRTPSG 

Name: 

RDPSG 


Function: 

Reads data from the PSG register. 


Entry: 

Register number in [Acc] 


Returns: 

Data in [Acc] 


Modifies: 

None 


ENT RDPSG 

Name: 

STRTMS 


Function: 

Checks/starts background tasks for 

PLAY. 

Entry: 

None 


Returns: 

None 


Modifies: 

ENT STRTMS 

All 



PLAY 


120 






ADVANCED PROGRAMMING GUIDE 


COMMENT % 

The following routines are used to access the console, i.e., the 
keyboard and the CRT. 

% 

> 

; Name: 

? Function: 

? Entry: 

; Returns: 

; Modifies: 

009C ENT CHSNS 
7 

; Name: 

; Function: 

7 

; Entry: 

; Returns: 

; Modifies: 

ft 

009F ENT CHGET 

/ 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

• 

$ 

00 A2 ENT CHPUT 

ft 
/ 

? Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

• 

/ 

00A5 ENT LPTOUT 

9 

; Name: 

; Function: 

; Entry: 

; Returns: 

ft 

9 

? Modifies: 

00A8 ENT LPTSTT 

; Name: CNVCHR 

j Function: Checks graphic header byte and converts codes. 

; Entry: Character code in [Acc] 

; Returns: Cy flag reset: graphic header byte 

; Cy and Z flags set, converted graphic code 

; Cy flag set, Z flag reset, non-converted code 


LPTSTT 

Checks the line printer status. 

None 

255 in [Acc] and Z flag reset if printer ready, 
0 and Z flag set if not. 

AF 


LPTOUT 

Outputs a character to the line printer. 
Character code to be output in [Acc] 
Carry flag set if aborted. 

F 


CHPUT 

Outputs a character to the console. 
Character code to be output in [Acc] 
None 
None 


CHGET 

Waits for characters being input and returns 
the character codes. 

None 

Character code in [Acc] 

AF 


CHSNS 

Checks the status of keyboard buffer. 
None 

Z flag reset if any character in buffer. 
AF 


121 









ADVANCED PROGRAMMING GUIDE 


Modifies: AF 


00 AB 


ENT 


CNVCHR 


Name: 

Function: 

Entry: 
Returns: 

Modifies: 


PINLIN 

Accepts a line from console until a CR or STOP 
is typed, and stores the line in a buffer. 

None 

Address of buffer top-1 in [HL], carry flag 
set if STOP is input. 

All 


00AE ENT 


PINLIN 


Name: 
Function: 
Entry: 
Returns: 

Modifies: 


INLIN 

Same as PINLIN, except if AUTFLG is set. 
None 

Address of buffer top-1 in [HLl, carry 
set if STOP is input. 


All 


flag 


00B1 


ENT 


INLIN 


Name: 

Function: 

Entry: 
Returns: 

Modifies: 


QINLIN 

Outputs a '?' mark and a space then falls into 
the INLIN routine. 

None 

Address of buffer top-1 in [HLl, carry flag 
set if STOP is input. 

All 


00B4 


ENT 


QINLIN 


Name: 

Function: 

Entry: 

Returns: 

Modifies: 

Note: 


BREAKX 

Checks the status of the Control-STOP key. 

None 

Carry flag set if being pressed. 

AF 

This routine is used to check Control-STOP 
when interrupts are disabled. 


00B7 ENT 


BREAKX 


Name: 
Function: 
Entry: 
Returns: 
Modifies: 


ISCNTC 

Checks the status of the SHIFT-STOP key. 

None 

None 

None 


00BA ENT 


ISCNTC 


Name: 
Function: 
Entry: 
Returns: 


CKCNTC 

Same as ISCNTC, used by BASIC. 

None 

None 


122 




ADVANCED PROGRAMMING GUIDE 


r 

m 

OOBD 


00C0 


OOC3 


00C6 


00C9 


OOCC 


OOCF 


Modifies: 

None 


ENT CKCNTC 

Name: 

BEEP 


Function: 

Sounds the 

buzzer. 

Entry: 

None 


Returns: 

None 


Modifies: 

All 


ENT BEEP 

Name: 

CLS 


Function: 

Clears the 

screen. 

Entry: 

None 


Returns: 

None 


Modifies: 

AF, BC, DE 


ENT CLS 

Name: 

POSIT 


Function: 

Locates the cursor at the specified position. 

Entry: 

Column in 

[H] , row in [L] 

Returns: 

None 


Modifies: 

AF 


ENT POSIT 

Name: 

FNKSB 


Function: 

Checks if 

function key display is active. If 


it is, it 

displays it, otherwise does nothing. 

Entry: 

FNKFLG 


Returns: 

None 


Modifies: 

All 


ENT FNKSB 

Name: 

ERAFNK 


Function: 

Erases the 

function key display. 

Entry: 

None 


Returns: 

None 


Modifies: 

All 


ENT ERAFNK 

Name: 

DSPFNK 


Function: 

Displays the function key display. 

Entry: 

None 


Returns: 

None 


Modifies: 

All 


ENT DSPFNK 

Name: 

TOTEXT 


Function: 

Forcibly places the screen in text mode. 


123 










ADVANCED PROGRAMMING GUIDE 


; Entry: 

; Returns: 

; Modifies: 

00D2 ENT TOTEXT 


None 

None 

All 


124 




ADVANCED PROGRAMMING GUIDE 


COMMENT % 

The following routines are used for game I/O access. 


; Name: 

; Function; 

; Entry; 

; Returns: 

; Modifies; 

m 
t 

00D5 ENT GTSTCK 

i 

; Name; 

; Function; 

; Entry: 

; Returns: 
i 

; Modifies: 

OOD8 ENT GTTRIG 

7 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

* 

OODB ENT GTPAD 

* 

; Name: GTPDL 

; Function: Returns the value of the paddle. 

; Entry: Paddle ID in [Acc] 

; Returns: Value in [Acc] 

; Modifies: All 

OODE ENT GTPDL 


GTPAD 

Checks the current touch PAD status. 
ID in [Acc] 

Value in [Acc] 

All 


GTTRIG 

Returns the current trigger button status. 
Trigger button ID in [Acc] 

Returns 0 in [Acc] if not pressed, 255 
otherwise. 

AF 


GTSTCK 

Returns the current joystick status. 
Joystick ID in [Acc] 

Direction in [Acc] 

All 


125 







ADVANCED PROGRAMMING GUIDE 


COMMENT % 

The following routines are used to access the cassette tape. 


; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

• 

00El ENT TAPION 

, 

; Name: TAPIN 

; Function: Inputs from tape. 

; Entry: None 

; Returns: Data in [Acc], carry flag set if aborted. 

; Modifies: All 

00E4 ENT TAPIN 

; Name: TAPIOF 

; Function: Stops reading from tape. 

; Entry: None 

; Returns: None 

; Modifies: None 

♦ 

00E7 ENT TAPIOF 

* 
f 

; Name: 

; Function: 

i 

; Entry: 

♦ 

/ 

; Returns: 

; Modifies: 

00EA ENT TAPOON 

/ 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

• 

00ED ENT TAPOUT 

; Name: TAPOOF 

i Function: Stops writing to tape. 

; Entry; None 

; Returns: None 

; Modifies: None 

OOFO ENT TAPOOF 


TAPOUT 

Outputs to tape. 

Data to be output in [Acc] 
Carry flag set if aborted. 
All 


TAPOON 

Sets motor on and writes header block to 
cassette. 

[Acc] holds non-0 value if a long header 
desired, 0 if a short header desired. 

Carry flag set if aborted. 

All 


TAPION 

Sets motor on and reads header from tape. 
None 

Carry flag set if aborted. 

All 


126 









ADVANCED PROGRAMMING GUIDE 


STMOTR 

Starts the cassette motor. 

0 in [Acc] to stop, 1 to start, 255 to flip. 
None 
AF 

00F3 ENT STMOTR 


Name: 
Function: 
Entry: 
Returns: 
Modifies: 


127 




AEVANCED PROGRAMMING GUIDE 


COMMENT % 

The following routines are used to handle queues. 
% 


; Name; LFTQ 

f Function: Returns the number of bytes left in the queue. 

; Entry: 

; Returns: 

; Modifies: 

♦ 

OOF6 ENT LFTQ 

f 

; Name: PUTQ 

; Function: Places a byte in the queue. 

; Entry: 

; Returns: 

; Modifies: 


OOF9 ENT PUTQ 


128 





ADVANCED PROGRAMMING GUIDE 


COMMENT % 

The following routines are used by the GENGRP and 
modules. 


; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

OOFC ENT RIGHTC 

9 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

• 

9 

OOFF ENT LEFTC 

* 

9 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

• 

/ 

0102 ENT UPC 

* 

9 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

• 

9 

0105 ENT TUPC 

* 

/ 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

010 8 ENT DOWNC 

9 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

• 

010B ENT TDOWNC 


RIGHTC 

Moves one pixel right 


LEFTC 

Moves one pixel left. 


UPC 

Moves one pixel up. 


TUPC 

Moves one pixel up. 


DOWNC 

Moves one pixel down. 


TDOWNC 

Moves one pixel down. 


ADVGRP 


129 









ADVANCED PROGRAMMING GUIDE 


; Name: SCALXY 

; Function: Scales the X-Y coordinates. 

; Entry: 

; Returns: 

; Modifies: 

♦ 

010E ENT SCALXY 

; Name: MAPXYC 

; Function: Maps the coordinate to the physical address. 

; Entry: 

; Returns: 

; Modifies: 

0111 ENT MAPXYC 


Name: 

Function: 

FETCHC 
Fetches 

current 

physical address and mask 

Entry: 
Returns: 

pattern. 

None 

Address 

in [HLl , 

mask pattern in [Acc] 

Modifies: 

A, HL 




0114 ENT FETCHC 

« 
i 

} Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

• 

0117 ENT STOREC 

} 

; Name: SETATR 

; Function: Sets attribute byte. 

; Entry: 

; Returns: 

; Modifies: 

« 

OilA ENT SETATR 

♦ 

9 

t Name: 

; Function: 

? Entry: 

; Returns: 

; Modifies: 

• 

011D ENT READC 

r 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 


READC 

Reads attribute of current pixel. 


SETC 

Sets current pixel to the specified attribute. 


STOREC 

Stores physical address and mask pattern. 
Address in [HLJ , mask pattern in [Accl 
None 
None 


130 










ADVANCED PROGRAMMING GUIDE 


0120 ENT SETC 

1 Name: NSETCX 

? Function: Sets pixels horizontally. 

; Entry: 

7 Returns: 

; Modifies: 

0123 ENT NSETCX 

♦ 

; Name: GTASPC 

; Function: Returns the aspect ratio. 

; Entry: None 

; Returns: DE, HL 

; Modifies: DE, HL 

0126 ENT GTASPC 

• 

? Name: PNTINI 

7 Function: Initializes the PAINT function. 

7 Entry: 

? Returns: 

? Modifies: 

0129 ENT PNTINI 

i 

7 Name: SCANR 

7 Function: Scans pixels to the right. 

7 Entry: 

7 Returns: 

7 Modifies: 

■ 

012C ENT SCANR 

7 Name: SCANL 

7 Function: Scans pixels to the left. 

7 Entry: 

7 Returns: 

7 Modifies: 

012F ENT SCANL 


131 








ADVANCED PROGRAMMING GUIDE 


COMMENT % 

The following routines are additional entries. 


f Name: 

; Function: 

; Entry: 

♦ 
f 

; Returns: 

; Modifies: 

0132 ENT CHGCAP 

? 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

0135 ENT CHGSND 

; Name: RSLREG 

; Function: Reads the current output to the primary slot 

• register. 

; Entry: None 

; Returns: Result in [Acc] 

; Modifies: A 


CHGSND 

Changes the status of the 1 bit sound port. 
0 in [Acc] to turn off, non-0 otherwise. 
None 
AF 


CHGCAP 

Changes the status of CAP lamp. 

0 in [Acc] to turn off the lamp, non-0 
otherwise. 

None 

AF 


013 8 ENT RSLREG 


? Name: WSLREG 

? Function: Writes to the primary slot register. 

} Entry: Value in [Acc] 

; Returns: None 

; Modifies: None 

013B ENT WSLREG 

* 

/ 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

013E ENT RDVDP 

§ 

; Name: SNSMAT 

j Function: Returns the status of a specified row of a 

f keyboard matrix. 

; Entry: Row # in [Acc] 

; Returns: Status in [Acc], corresponding bit is reset 

; to 0 if a key is being pressed. 

; Modifies: AF 


RDVDP 

Reads the VDP status register. 
None 

Data in [Accl 
A 


132 





ADVANCED PROGRAMMING GUIDE 


0141 ENT SNSMAT 

; Name: PHYDIO 

Function: Performs operation for mass-storage devices 

; such as disks. 

; Entry: 

; Returns: 

; Modifies: 

; Note: In the minimum configuration, only a hook is 

; provided. 

0144 ENT PHYDIO 

♦ 

; Name: FORMAT 

; Function: Initializes mass-storage devices. 

; Entry: 

; Returns: 

; Modifies: 

; Note: In the minimum configuration, only a hook is 

j provided. 

• 

0147 ENT FORMAT 

t 

; Name: 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

• 

/ 

014A ENT ISFLIO 

; Name: OUTDLP 

; Function: Outputs to the line printer. 

; Entry: Code in [Acc] 

; Returns: None 

; Modifies: F 

; Note: This entry differs from LPTOUT in that: 

; 1) TABS are expanded to spaces, 

; 2) Hiragana and graphics are converted when 

• a non-MSX printer is in use, 

; 3) A jump to 'Device I/O error' is made when 

; aborted. 

* 

014D ENT OUTDLP 

; Name: GETVCP 

; Function: 

; Entry: 

; Returns: 

; Modifies: 

; Note: Used only to play music in the background. 

0150 ENT GETVCP 


ISFLIO 

Checks if device I/O is being done. 
None 

Non-zero if so, zero otherwise. 

AF 


133 








ADVANCED PROGRAMMING GUIDE 


; Name: GETVC2 

; Function: 

; Entry: 

; Returns: 
j Modifies: 

; Note: Used only to play music in the background. 

♦ 

0153 ENT GETVC2 

* 
i 

; Name: 

; Function: 

? Entry: 

; Returns: 

; Modifies: 

0156 ENT KILBUF 

# 

; Name: 

; Function: 

• 
i 

; Entry: 

? Returns: 

; Modifies: 

0159 ENT CALBAS 

/ 

; The following is a patch area for BIOS. It is placed here to 
; make it easier to add new entry vectors. 

HOLE 90 


CALBAS 

Performs far_call (i.e., inter-slot call) into 
the BASIC interpreter. 

Address in [1X1 


KILBUF 

Clears the keyboard buffer. 

None 

None 

HL 


134 







ADVANCED PROGRAMMING GUIDE 


2.2.2 Work Area 


• 

9 

The following short routines 

• 

i 

write and call functions. 

7 

PPI.AW==&B10101000 


# 

7 

Read primitive 


F380 

RMB(RDPRIM, 5) 



OUT 

PPI.AW 


MOV 

E, M 


JMPR 

WRPRMl 

• 

i 

* 

i 

Write primitive 


F385 

RMB(WRPRIM, 7) 



OUT 

PPI.AW 


MOV 

M,E 


WRPRM1: MOV 

A, D 


OUT 

PPI.AW 


RET 


7 

7 

Call primitive 


F38C 

RMB (CLPRIM, 14) 



OUT 

PPI.AW 


EXAF 



CALL 

CLPRIM+12 


EXAF 



POP 

PSW 


OUT 

PPI.AW 


EXAF 



RET 



IX 



PCHL 


F39A 

RMB(USRTAB, 20) 



DW 

FCERR 


DW 

FCERR 


DW 

FCERR 


DW 

FCERR 


DW 

FCERR 


DW 

FCERR 


DW 

FCERR 


DW 

FCERR 


DW 

FCERR 


DW 

FCERR 

F3AE 

RMB (LINL40 ,1) 



DB 

39 

F3AF 

RMB(LINL32,1) 



DB 

LINLN 

F3B0 

RMB(LINLEN, 1) 



DB 

LINLN 


perform the inter-slot read/ 


;A8H Write to PPI Port A 


Select primary slot 
Read from slot 
Restore current setting 


;Select primary slot 
;Write to slot 
;Load current setting 
jRestore current setting 


;Select primary slot 
;Restore [Acc] and flags 
;Perform indirect call by IX 
;Save possible returned value 
;Get old slot status 
;Restore it 

;Restore possible returned 
;value 


;Line length 


135 



ADVANCED PROGRAMMING GUIDE 


F3B1 RMB(CRTCNT, 1) 

DB 24 ;Line count 

F3B2 RMB(CLMLST, 1) 

DB 14 


Beginning of MSX-specific work area 


F3B3 

RMB(TXTNAM, 

2) 






DW1 

&B00000000000000+$CODE 

;0000H 


F3B5 

RMB(TXTCOL, 

2) 






DWl 

&BOOOOOOOOOOOOOQ+$CODE 

* 

t 

Unused 

F3B7 

RMB (TXTCGP, 

2) 






DWl 

&B00100000000000+5CODE 

;0800 H 


F3B9 

RMB(TXTATR, 

2) 






DWl 

&BO0000000000000+$CODE 

• 

f 

Unused 

F3BB 

RMB(TXTPAT, 

2) 






DWl 

&booooooooqooooo+$code 

• 

t 

Unused 

F3BD 

RMB(T32NAM, 

2) 






DWl 

&BOHOOOOOOOOOOO+$CODE 

;1800H 


F3BF 

RMB(T3 2COL, 

2) 






DWl 

&B10000000000000+$CODE 

;2000H 


F3C1 

RMB (T32CGP, 

2) 






DWl 

&B00000000000000+$CODE 

;0000H 


F3C3 

RMB(T32ATR, 

2) 






DWl 

&B01101100000000+$CODE 

?1B00H 


F3C5 

RMB(T3 2PAT, 

2) 






DWl 

&B1HOOOOOOOOOOO+$CODE 

; 3 80 OH 


F3C7 

RMB(GRPNAM, 

2) 






DWl 

&B01100000000000+$CODE 

; 180 OH 


F3C9 

RMB(GRPCOL, 

2) 






DWl 

&B10000000000000 + $ CODE 

; 2000H 


F3CB 

RMB (GRPCGP, 

2) 






DWl 

&BOOOOOOOOOOOOOO+$CODE 

; 0000H 


F3CD 

RMB(GRPATR, 

2) 






DWl 

&boiioiioooooooo+$code 

;1B00H 


F3CF 

RMB(GRPPAT, 

2) 






DWl 

&B11100000000000+$CODE 

;3800H 


F3D1 

RMB(MLTNAM, 

2) 






DWl 

&B00100000000000+SCODE 

; 0800H 


F3D3 

RMB(MLTCOL, 

2) 






DWl 

&B00000000000000+$CODE 

i 

Unused 

F3D5 

RMB (MLTCGP, 

2) 






DWl 

&B00000000000000+SCODE 

; OOOOH 


F3D7 

RMB(MLTATR, 

2) 






DWl 

&B01101100000000+$CODE 

; 1B00H 


F3D9 

RMB(MLTPAT, 

2) 






DWl 

&B11100000000000+$CODE 

; 3 80 0 H 


F3DB 

RMB(CLIKSW, 

1) 






DB 

1 



F3DC 

RMB(CSRY, 

1) 






DB 

1 ;Cursor position 

y 



136 




ADVANCED PROGRAMMING GUIDE 


F3DD RMB(CSRX, 1) 

DB 1 ;Cursor position X 

F3DE RMB(CNSDFG, 1) 

DB 0 ;Function key display switch 

* 

/ 

; Save area for the VDP registers 

F3DF RMB(RGOSAV, 1) 

DB 0 

F3E0 RMB(RG1SAV, 1) 

DB &B11100000 

F3E1 RMB (RG2SAV, 1) 

DB 0 

F3E2 RMB(RG3SAV, 1) 

DB 0 

F3E3 RMB(RG4SAV, 1) 

DB 0 

F3E4 RMB(RG5 SAV, 1) 

DB 0 

F3E5 RMB(RG6SAV, 1) 

DB 0 

F3E6 RMB(RG7 SAV, 1) 

DB 0 

F3E7 RMB(STATFL, 1) 

DB 0 

♦ 

F3E8 RMB(TRGFLG, 1) 

DB &B11111111 

F3E9 RMB (FOR CL R, 1) 

DB 15 ;Foreground color, default is white 

F3EA RMB(BAKCLR, 1) 

DB 4 background color, default is blue 

F3EB RMB (BDRCLR, 1) 

DB 7 ;Screen border color 

F3EC RMB(MAXUPD, 3) 

JMP SCODE 

F3EF RMB(MINUPD, 3) 

JMP $CODE 

F3F2 RMB(ATRBYT, 1) 

DB 15 ;Attribute byte 

F3F3 RMB(QUEUES, 2) 

DWl QUETAB ;Address of QUEUTL queue tables 
F3F5 RMB(FRCNEW, 1) 

DB 255 

F3F6 RMB(SCNCNT, 1) 

DB 1 ;Interval of keyscan 

F3F7 RMB(REPCNT, 1) 

DB 50 

F3F8 RMB (PUTPNT, 2) 

DWl KEYBUF 

F3FA RMB(GETPNT, 2) 

DWl KEYBUF 

F3FC RMB(CS120, 5*2) 


137 



ADVANCED PROGRAMMING GUIDE 


; Some parameters for cassette 

I 

HEDLEN= 2000 ;Length of header bits (mark) for short 

{header 

7 

; The following parameters are for 1200 baud. 

* 

INTERN LOW01,HIGH01,LOW11,HIGH11 
LOW01= 83 {Width of low state for 0 

HIGH01= 92 {Width of high state for 0 

LOW11= 38 {Width of low state for 1 

HIGH11= 45 ;Width of high state for 1 

DB LOW01 

DB HIGH01 

DB LOWll 

DB HIGH11 

DB HEDLEN *2/256 

i 

} The following parameters are for 2400 baud. 

• 

INTERN LOW02, HIGH02 , LCW12, HIG HI 2 

LOW02= 37 ;Width of low state for 0 1200Hz- 

;416.7 usee 

HIGHO2= 45 ;Width of high state for 0 

L0W12= 14 ;Width of low state for 1 2400Hz- 

{208.3 usee 

HIG HI 2*= 22 {Width of high state for 1 

DB LOW02 

DB HIGHO2 

DB LCW12 

DB HIGH12 

DB HEDLEN*4/256 

F406 RMB(LOW, 2) 

DB LCW01 {Default 1200 baud 

DB HIGH01 

P40 8 RMB ( HIGH, 2) 

DB LOWll 

DB HIG HI 1 

F40A RMB (HEADER, 1) 

DB HEDLEN*2/256 ;Default 1200 baud 

F40B RMB(ASPCT1, 2) 

DWl $CODE+256 ;256/aspect ratio 

F40D RMB(ASPCT2, 2) 

DWl $CODE+256 ?256*aspect ratio 

9 

; ENDPRG must be the last one which needs initializing 
F40F RMB(ENDPRG, 5) 

DB {Dummy program end for RESUME NEXT 

9 

; End of initialized constants 

• 

INTERN INILEN 

INILEN= ENDPRG+1-INIRAM {Length of initialized data 


138 







ADVANCED PROGRAMMING GUIDE 


F414 RMB(ERRFLG, 1) 
F415 RMB(LPTPOS, 1) 

F416 RMB(PRTFLG, 1) 
F417 RMB (NTMSXP, 1) 

F418 RMB(RAWPRT, 1) 

F419 RMB (VLZ ADR, 2) 
F41B RMB(VLZDAT, 1) 
F41C RMB(CURLIN, 2) 
ZX== ZX+1 
F41F RMB (KBUF, KBFLEN) 
F55D RMB(BUFMIN, 1) 


F55E RMB(BUF, BUFLEN+3) 


F660 RMB(ENDBUF, 1) 
F661 RMB(TTYPOS, 1) 
F662 RMB(DIMFLG, 1) 


F663 RMB(VALTYP, I) 
F664 RMB(OPRTYP, 0) 


F664 RMB(DORES, 1) 


F665 RMB(DONUM, 1) 


F666 RMB(CONTXT, 2) 


F668 RMB(CONSAV, 1) 

F669 RMB(CONTYP, 1) 
F66A RMB(CONLO, 8) 
F672 RMB(MEMSIZ, 2) 
F67 4 RMB(STKTOP, 2) 


F676 RMB(TXTTAB, 2) 


{Used to save the error number 
;Position of printer head: initially 
;0 

{Whether output goes to LPT 
;Non-0 if not 1 MSX-printer' 

{Non-0 if printing is in 'raw-mode' 
{Address of character replaced by VAL 
{Character replaced by 0 by VAL 


This is the crunch buffer. 

Since the data pointer always starts 
on commas or terminators, commas (pre¬ 
load or ROM) are used by INPUTS. 

Type in stored here. Direct statements 
execute out of here. Remember "INPUT" 
destroys BUF. Must be at a lower 
address than DSCTMP, or assignment 
of string values in direct statements 
won't copy into string space — which 
it must. 

Place to stop big lines 
Store terminal position here 
In getting a pointer to a variable 
it is important to remember whether 
it is being done for a "DIM" or not. 
DIMFLG and VALTYP must be consecutive 
locations. 

Type indicator 

Used to store operator number in the 
extended momentarily before operator 
application (APPLOP) 

Whether can or can't crunch reserved 
words turned on in the 8K when "DATA" 
is being scanned by CRUNCH, thus un¬ 
quoted strings won't be crunched. 

Flag for CRUNCH =0 means numbers 
allowed, (floating, INT, DBL) 1 means 
numbers allowed, CRUNCH by calling 
LINGET -1 (377) means numbers 

not allowed (scanning variable name). 
Saved text pointer used by CHRGET to 
save the text pointer after a constant 
has been scanned. 

The saved token for a constant after 
CHRGET has been called. 

Saved constant VALTYPE 
Saved constant VALUE 
Highest location in memory 
Top location to be used for the stack, 
(initially set up by INIT depending 
on memory size to allow for 50 bytes 
of string space. Changed by a CLEAR 
command with arguments. 

Pointer of beginning of text does not 


139 




ADVANCED PROGRAMMING GUIDE 


F67 8 RMB(TEMPPT, 2) 

F67A RMB(TEMPST, 3*NUMTMP) 
F698 RMB(DSCTMP# 3) 


INTERN DSCPTR 
DSCPTR= DSCTMP+1 
F69B RMB(FRETOP, 2) 
F69D RMB(TEMP3, 2) 


F69F RMB(TEMP8, 2) 

F6A1 RMB(ENDFOR, 2) 

F6A3 RMB(DATLIN, 2) 
F6A5 RMB(SUBFLG, 1) 


F6A6 RMB(USFLG, 0) 
F6A6 RMB(FLGINP, 1) 
F6A7 RMB(TEMP, 2) 


F6A9 RMB(PTRFLG, 1) 

F6AA RMB(AUTFLG, 1) 

F6AB RMB(AUTLIN, 2) 
F6AD RMB(AUTINC, 2) 
F6AF RMB(SAVTXT, 2) 

F6B1 RMB (SAVSTK, 2) 


F6B3 RMB(ERRLIN, 2) 
F6B5 RMB(DOT, 2) 
F6B7 RMB(ERRTXT, 2) 
F6B9 RMB(ONELIN, 2) 
F6BB RMB(ONEFLG, 1) 

F6BC RMB(TEMP2, 2) 


F6BE RMB(OLDLIN, 2) 


;change after being set up by INIT. 

;Pointer at first free temporary des¬ 
criptor initialized to point to TEMPST 
;Storage for NUMTMP temp, descriptors 
;String functions build answer 
;descriptor here must be after TEMPST 
;and before PARM1. 

;Where in DSCTMP string address stored 
;Top of string free space 
;Used to store the address of the end 
;of string arrays in garbage collection 
;and used momentarily by FRMEVL used 
;in EXTENDED by FOUT and user defined 
;functions and array variable handling 
temporarily. 

;7/3/79 Now used for garbage collection 
?not TEMP3 due to conflict 
;Saved text pointer at end of "FOR" 
;statement 

;DATA LINE # — remember ERRORS 
;Flag whether subscripted variable 
;allowed "FOR" and USR-defined function 
;Pointer fetching turn this on before 
calling PTRGET so arrays won't be 
{detected. STKINI and PTRGET clear it. 

{Flag for INPUT or READ 

{Temporary for statement code. NEWSTT 

{saves [H,L] here for INPUT and ''C, 

{"LET" saves variable pointers here, 
{for "FOR-NEXT" saves its text pointer 
{here, CLEARC saves [H,Ll here. 

{=0 If no line numbers converted to 
{pointers, non-zero if pointers exist. 
{Flag to indicate AUTO command in 
{progress, =0 if not, non-zero if so. 
{Current line being inserted by AUTO 
{AUTO increment 

{Place where NEWSTT saves text pointer 
;for "RESUME" statement 
{NEWSTT saves stack here before so 
{that error recovery can restore the 
{stack when an error occurs. 

{Line number where last error occured. 
{Keeps current line for edit & LIST 
{Text pointer for use by "RESUME" 

{Line to GOTO when an error occurs. 
{ONEFLG=l if executing an error trap 
{routine, otherwise 0. 

{Formula evaluator temp. Must be pre- 
{served by operators used in EXTENDED 
{by FOUT and user-defined functions 
;array variable handler temporary 
{Old line number (set up by *C, "STOP” 


140 




ADVANCED PROGRAMMING GUIDE 


F6C0 RMB(OLDTXT, 2) 
F6C2 RMB(VARTAB, 2) 

P6C4 RMB(ARYTAB, 2) 

F6C6 RMB(STREND, 2) 

F6C8 RMB(DATPTR, 2) 

F6CA RMB(DEFTBL, 26) 


or "END" in a program). 

Old text pointer. Points at statement 
to be executed next. 

Pointer to start of simple variable 
space. Updated whenever the size of 
the program changes, set to [TXTTAB]+2 
by SCRATCH ("NEW"). 

Pointer to beginning of array table. 
Incremented by 6 whenever a new simple 
variable is found, and set to [VARTAB] 
by CLEARC. 

End of storage in use. Increased 
whenever a new array or a simple 
variable is encountered, set to 
[VARTAB] by CLEARC. 

Pointer to data. Initialized to point 
at the zero in front of [TXTTAB] by 
"RESTORE" which is called by CLEARC, 
updated by execution of a "READ" 

This gives the default VALTYP for 
each letter of the alphabet. It is 
set up by "CLEAR" and is changed by 
"DEFSTR", "DEFINT", "DEFSNG", "DEFDBL" 
and used by PTRGET when ! # % or 

$ do not follow a variable name. 


RAM storage for user—defined function parameter information 


INTERN PRMSIZ 
PRMSIZ==~D100 
F6E4 RMB(PRMSTK, 2) 

F6E6 RMB(PRMLEN, 2) 

F6E8 RMB(PARM1, PRMSIZ) 
F74C RMB(PRMPRV, 2) 


F74E RMB (PRMLN2 , 2) 

F750 RMB(PARM2, PRMSIZ) 
F7B4 RMB(PRMFLG, 1) 

F7B5 RMB(ARYTA2, 2) 

F7B7 RMB(NOFUNS, 1) 

F7B8 RMB(TEMP9, 2) 

F7BA RMB(FUNACT, 2) 

F7BC RMB ( SWPTMP, 8) 

F7C4 RMB(TRCFLG, 1) 


Number of bytes for definition block 
Previous definition block on stack 
:block (for garbage collection) 

Number of bytes in the active table 
The active parameter definition table 
Initially PRMSTK, the pointer at the 
previous parameter block (for garbage 
icollection) 

Size of parameter block being built 
Place to keep parameters being made 
Used by PTRGET to flag if PARM1 has 
been searched 

Stopping point for simple search 
' (either [ARYTAB] or PARMl+tPRMLEN]) 
Zero if no functions active. Saves 
TIME in simple search 

Garbage collection temp. to chain 
through parameter blocks. 

Count of active functions 

Value of first "SWAP" variable stored 

here 

Zero means no trace in progress 


This is the RAM temporary area for the math package routines 


F7C5 RMB(FBUFFR, 43) ;Buffer for FOUT 


141 







ADVANCED PROGRAMMING GUIDE 


F7F0 RMB(DECTMP, 2) ;Used by decimal int to float 

F7F2 RMB(DECTM2, 2) ;Used by divide 

F7F4 RMB(DECCNT, 1) ;Used by divide 

# 

; Decimal accumulator 
# 

ZX== ZX+1 ;Temporary sign complement 

F7F6 RMB(DAC, 16) 

INTERN FACLO 
FACLO= DAC+2 

4 

/ 

; Holding registers for decimal multiplication 


F806 

RMB(HOLD8, 

48) 

; 80 *X 

F836 

RMB(HOLD2 , 

8) 

; 2*X 

F83E 

RMB(HOLD, 

8) 

; 1*X 


; Argument accumulator 

f 

ZX== ZX+1 ;Temporary sign complement 

F847 RMB(ARG, 16) 

F857 RMB(RNDX, 8) ;Holds last random number generated 


142 






ADVANCED PROGRAMMING GUIDE 


SUBTTL Data Area 

♦ 

/ 

; Set up by initialization. Unchanged by disk code. 

F85F RMB(MAXFIL, 1) {Highest legal file number 

F860 RMB(FILTAB, 2) ;Points to adress of file data 

F862 RMB(NULBUF, 2) ;Points to file 0 buffer 

* 

t 

; Set up by file / drive selection routines. Only PTRFIL is 

; cleared elsewhere. 

• 

r 

F864 RMB(PTRFIL, 2) {Points to file data of selected file 

# 

; Misc. 

r 

F866 RMB(RUNFLG, 0) ;Non-zero for RUN after LOAD 

F866 RMB(FILNAM,11) {Holds filename for DIRSRC, from NAMSCN 

F871 RMB(FILNM2,11) {Holds other filename for NAME 

F87C RMB(NLONLY, 1) {Non-zero when loading program 

t 

{ Set up by NULOPN and BSAVE, used by BSAVE and CREATE. 

t 

F87D RMBCSAVEND, 2) {End of binary or memory image save 

F87F RMB(FNKSTR, 16*10) {Function key string save area 

F91F RMB(CGPNT, 3) {Where character pattern is held in ROM 

F922 RMB(NAMBAS,2) {Base of current name table 

F924 RMB(CGPBAS,2) {Base of current cgen table 

F926 RMB(PATBAS,2) {Base of current sprite pattern table 

F928 RMB(ATRBAS,2) {Base of current sprite attribute table 

r 

{ For GENGRP 

m 

F92A RMB (CLOC, 2) 

F92C RMB(CMASK, 1) 

F92D RMB(MINDEL,2) 

F92F RMB (MAXDEL»2) 

j For CIRCLE 


F931 RMB(ASPECT,2) 
F933 RMB (CENCNT, 2) 
F93 5 RMB(CLINEF,1) 
F936 RMB(CNPNTS,2) 
F93 8 RMB(CPLOTF,1) 
F939 RMB (CPCNT, 2) 
F93B RMB (CPCNT8,2) 
F93D RMB (CRCSUM, 2) 
F93F RMB(CSTCNT,2) 
F941 RMB(CSCLXY,1) 
F942 RMB(CSAVEA,2) 
F944 RMB (CSAVEM, 1) 
F945 RMB(CXOFF, 2) 
F947 RMB(CYOFF, 2) 

9 


Aspect ratio for circle 
End count 

Flag to draw line to center 

Points to plot 

Plot polarity flag 

1/8 of number of points in circle 

Number of pts in circle 

Circle sum 

Start count 

Scaling of x and y 

ADVGRP C save area 

ADVGRP C save area 

X offset from center save location 

Y offset save location 


143 








ADVANCED PROGRAMMING GUIDE 


; For PAINT 

• 

F949 RMB(LOHMSK,!) 

F94A RMB(LOHDIR,l) 

F94B RMB(LOHADR,2) 

F94D RMB(LOHCNT,2) 

F94F RMB(SKPCNT,2) 

F951 RMB(MOVCNT,2) 

F953 RMB(PDIREC,1) 

F954 RMB(LFPROG,!) 

F955 RMB(RTPROG,1) 

; For MACLNG 

F956 RMB(MCLTAB,2) 

F958 RMB(MCLFLG/1) ;Indicates PLAY/DRAW 

; QUEUES for PLAY statement 

F959 RMB(QUETAB, A D24) ;4 queues (6 bytes each) 

F97I RMB(QUEBAK,~D4) ;For BCKQ 

MUSQLN=: *012 8 ;Size of voice queues 

RSIQLN=:''D64 

F97 5 RMB (VOICAQ, MUSQLN) ;Voice a queue 

F9F5 RMB (VOICBQ, MUSQLN) ;Voice b queue 

FA75 RMB (VOICCQ,MUSQLN) ;Voice C queue 

FAF5 RMB(RS2IQ, RSIQLN) ;RS232 input queue 
7 

; Music stuff 


;RAM save area for left overhang 


;Skip count 
;Move count 
;Paint direction 


FB35 RMB(PRSCNT,1) ;D1-D0 = number of strings parsed 

;D7=0 if first pass, 1 if not 

FB36 RMB(SAVSP, 2) ;Save main stack pointer During play 

FB38 RMB(VOICEN,1) ;Set current voice being parsed 

FB3 9 RMB (SAWOL, 2) ;Save volume for pause 

FB3B RMB (MCLLEN, 1) 

FB3C RMB(MCLPTR,2) 

FB3E RMB(QUEUEN,1) ;Used by intime-action-dequeue 

FB3F RMB(MUSICF,1) ;Music interrupt flag 

FB40 RMB(PLYCNT,!) ;Number of play statements queued for 

;background task 
7 

; Per Voice Static Data Area Displacement Definitions 


METREX=:0 
VCXLEN=:METREX+2 
VCXPTR=:VCXLEN+1 
V CXS T P=:V CXPTR+2 
QLENGX=:VCXSTP+2 
NTICSX=:QLENGX+1 
TONPRX=:NTICSX+2 
AMPLTX=:TONPRX+2 
ENVPRX=: AMPLTX+1 
0CTAVX=:ENVPRX+2 


} Timer countdown 
;MCLLEN for this voice 
;MCLPTR for this voice 
;Save top of stack pointer 
;Number of bytes to be queued 
;New countdown 
;Tone period 
;Amplitude/shape 
; Envelope period 
;Octave 


144 








ADVANCED PROGRAMMING GUIDE 


NOTELX=: OCTAVX+1 
TEMPOX=:NOTELX+1 
VOLUMX=;TEMPOX+1 
ENVLPX=:VOLUMX+l 
MCLSTX=:ENVLPX+ A DI4 
MCLSEX=:MCLSTX+3 
VCBSIZ = :MCLSEX-METREX+1 
FB41 RMB(VCBA, VCBSIZ) 
PB 66 RMB(VCBB, VCBSIZ) 
FB 8 B RMB(VCBC, VCBSIZ) 


;Note length 
? Tempo 
;Volume 

;Envelope shape 
;Stack save area 
; Initial stack 
;Voice static buffer size 
jStatic data for voice 0 

;Static data for voice 1 

?Static data for voice 2 


Area between here and MUSICF is cleared everytime a IGICIN 
is called. 


FBBO RMB(ENSTOP,l) 

FBB1 RMB(BASROM, 1) 

FBB2 RMB(LINTTB/2 4) 

FBCA RMB(FSTPOS,2) 

FBCC RMB(CODSAV,1) 

FBCD RMB (FNKSWI,1) 

FBCE RMB(FNKFLG,10) 

FBD8 RMB (ONGSBF,l) 

FBD9 RMB(CLIKFL,1) 

FBDA RMB(OLDKEY,11) 

FBE5 RMB ( NEWKEY, 11) 

INTERN SFTKEY 
SFTKEY= NEWKEY+6 
FBFO RMB (KEYBUF, 40) 

FC18 RMB(BUFEND,0) 

FC18 RMB(LINWRK,40) 

FC40 RMB(PATWRK,8) 

FC48 RMB(BOTTOM,2) 

FC4A RMB(HIMEM, 2) 

FC4C RMB (TRPTBL, 3 *NUMTRP) 
FC9A RMB(RTYCNT,1) 

FC9B RMB(INTFLG,1) 

FC9C RMB(PADY, 1) 

FC9D RMB(PADX, 1) 

FC9E RMB(JIFFY, 2) 

FCAO RMB(INTVAL,2) 

FCA2 RMB(INTCNT,2) 

FCA4 RMB(LCWLIM,1) 

FCA5 RMB(WINWID,1) 

FCA6 RMB(GRPH ED,1) 

FCA7 RMB(ESCCNT,1) 

FCA8 RMB(INSFLG,1) 

FCA9 RMB(CSRSW, 1) 

FCAA RMB(CSTYLE,1) 

FCAB RMB(CAPST, 1) 

FCAC RMB(KANAST,1) 

FCAD RMB(KANAMD,1) 

FCAE RMB(FLBMEM,1) 

FCAF RMB(SCRMOD,1) 


;Non-zero if warm start enabled 
;Non-zero if BASIC text is in ROM 
;Line terminator table 
7 First position when entered INLIN 
7 Code save area for cursor 
7 Indicates which function key is 
;dislayed 

7 Indicates key is assigned to event 
?device 

;Global event flag 

7 Old key status 
;New key status 

,*GR,CTRL, SHIFT status 
?Key code buffer 
7 End of KEYBUF 

7 Scratch area for screen handler 
7 Scratch area for pattern converter 
7 Bottom of equipped RAM 
?Highest available memory 
;Trap table 


;Used when reading cassette 
7 Used when reading cassette 
7 Flag for graphic character output 
;Escape sequence counter 
;Insert mode flag 
7 Cursor display switch 
7 Cursor style 
7 Capital status 
7 Kana lock status 
,-Non-O if JIS 

70 if loading BASIC program 
7 Screen mode 


145 




ADVANCED PROGRAMMING GUIDE 


;(0-ext,1-text,2-hires,2-multi) 

FCBO RMB(OLDSCR,l) ;Screen mode save area 

FCBl RMB(CASPRV,1) ;Previous character save area for CAS: 

FCB2 RMB(BRDATR,1) ;Border color for PAINT 

FCB3 RMB(GXPOS, 2) 

FCB5 RMB(GYPOS, 2) 

FCB7 RMB(GRPACX,2) ;Graphic accumulater 

FCB9 RMB(GRPACY,2) 

FCBB RMB(DRWFLG , 1> 

FCBC RMB(DRWSCL,1) ;Draw scale factor - 0 means no scaling 

FCBD RMB(DRWANG,1) {Draw angle (0-3) 

; For BLOAD and BSAVE 

m 

FCBE RMB(RUNBNF,1) j Doing BLOAD, BSAVE or not 

FCBF RMB(SAVENT,2) ;Start address for BSAVE 

i 

} Information save area for slots 

FCC1 RMB(EXPTBL, 4) ;Flag table for expanded slot 

;Holds 255 if expanded 

FCC5 RMB(SLTTBL, 4) } Current setting for each expanded 

;slot register 

FCC9 RMB(SLTATR, 64) ;Holds attributes for each slot 

FD09 RMB(SLTWRK, 128) ?Holds work area specific for each slot 

f 

; For CALL statement and device expander 
* 

FD89 RMB(PROCNM,16) ;Name of expanded statement terminated 

;by 0 

FD99 RMB(DEVICE, 1) ;The device ID for a cartridge (0 to 3) 


146 






ADVANCED PROGRAMMING GUIDE 


COMMENT % 

The following are definitions of hooks and their functions: 

Name - Name of hook 

Location - Location in module it is used 

Purpose - Use 

% 

GSX== ZX 
FD9A RMB(HOKJMP, 0) 

9 

; Name: H.KEYI 

; Location: MSXIO, at the beginning of interrupt handler 

; Purpose: Does additional interrupt handling such as 

7 RS-232C. 

FD9A RMB (H.KEYI, 5) 

9 

7 Name: H.TIMI 

7 Location: MSXIO, in timer interrupt handler 

7 Purpose: Allows other interrupt handling invoked by 

; timer. 

FD9F RMB(H.TIMI,5) 

7 

7 Name: H.CHPU 

7 Location: MSXIO, at the beginning of CHPUT (CHaracter 

7 outPUT) routine. 

7 Purpose: Allows for other console output devices. 

■ 

FDA4 RMB (H.CHPU, 5) 

9 

; Name: H.DSPC 

7 Location: MSXIO, at the beginning of DSPCSR (DiSPlay 

7 CurSoR) routine. 

7 Purpose: Allows for other console output devices. 

• 

f 

FDA9 RMB (H.DSPC, 5) 

9 

7 Name: H.ERAC 

7 Location: MSXIO, at the beginning of ERACSR (ERAse 

7 CurSoR) routine. 

7 Purpose: Allows for other console output devices. 

FDAE RMB(H.ERAC,5) 


7 Name; H.DSPF 

7 Location: MSXIO, at the beginning of DSPFNK (Display 

7 FuNction Key) routine. 

7 Purpose: Allows for other console output devices. 

FDB3 RMB(H.DSPF,5) 


147 









ADVANCED PROGRAMMING GUIDE 


Name: 

Location: 


FDB8 


FDBD 


FDC2 


FDC7 


FDCC 


FDD1 


Purpose: 

RMBCH.ERAF,5) 

Name: 

Location: 

Purpose: 

RMB(H.TOTE,5) 

Name: 
Location: 

Purpose: 

RMB (H. CHGE, 5) 

Name: 

Location: 

Purpose: 

RMB(H.INIP,5) 

Name: 

Location: 

Purpose: 

RMB(H.KEYC,5) 

Name: 

Location: 

Purpose: 

RMBCH.KYEA,5) 

Name: 

Location: 


Purpose: 
FDD6 RMBCH.NMI, 5) 


Name: 

Location: 

Purpose: 


H.ERAF 

MSXIO, at the beginning of ERAFNK (ERAse 
FuNction Key) routine. 

Allows for other console output devices. 


H.TOTE 

MSXIO, at the beginning of TOTEXT (force 
screen TO TEXT mode) routine. 

Allows for other console output devices. 


H. CHGE 

MSXIO, at the beginning of CHGET (CHaracter 
GET) routine. 

Allows for other console input devices. 


H.INIP 

MSXIO,at the beginning of INIPAT (INItialize 
PATtern) routine. 

Allows for other character sets. 


H.KEYC 

MSXIO, at the beginning of KEYCOD (KEY 
CODer) routine. 

Allows for other key assignments. 


H.KYEA 

MSXIO, at the beginning of KYEASY (KeY EASY) 
routine. 

Allows for other key assignments. 


H. NMI 

MSXIO, at the beginning of NMI (Non Maskable 
Interrupt) routine. 

Allows for NMI handling. 


H.PINL 

MSXINL, at the beginning of PINLIN (Program 
INput LINe) routine. 

Allows other console input devices or other 
input designs to be used. 


148 




ADVANCED PROGRAMMING GUIDE 


FDDB RMB(H.PINL,5) 

f 

; Name: 

; Location: 

? 

; Purpose: 
i 

FDEO RMB(H.QINL,5) 

I 

; Name: 

; Location: 

■ 

9 

; Purpose: 


FDE5 RMB(H.INLI,5) 


Name: 

Location: 


; Purpose: 
FDEA RMB (H. ONGO, 5) 


; Name: 

; Location: 

t 

; Purpose: 

• 

9 

FDEF RMB(H.DSK0,5) 

9 

} Name: 

; Location: 

« 

9 

; Purpose: 

* 

FDF4 RMB(H.SETS,5) 


Name: 
Location: 
Purpose: 


FDF9 RMB(H.NAME,5) 


Name: 

Location: 


; Purpose: 
FDFE RMB(H.KILL,5) 


Name: 

Location: 


H.QINL 

MSXINL, at the beginning of QINLIN (Question 
mark and INput LINe) routine. 

Allows other console input devices or other 
input designs to be used. 


H.INLI 

MSXINL, at the beginning of INLIN (INput 
LINe) routine. 

Allows other console input devices or other 
input designs to be used. 


H.ONGO 

MSXSTS, at the beginning of ONGOTP (ON GOTo 
Procedure) routine. 

Allows for other console input devices to be 
used. 


H.DSKO 

MSXSTS, at the beginning of DSKO$ (DiSK 
Output) routine. 

Installs the disk driver. 


H. SETS 

MSXSTS, at the beginning of SETS (SET 
attributes) routine. 

Installs the disk driver. 


H. NAME 

MSXSTS, at the NAME (reNAME) routine. 
Installs the disk driver. 


H.KILL 

MSXSTS, at the beginning of KILL (KILL 
file) routine. 

Installs the disk driver. 


H. I PL 

MSXSTS, at the beginning of IPL (Initial 
Program Load) routine. 


149 







ADVANCED PROGRAMMING GUIDE 


; Purpose: 

FE03 RMB ( H. IPL, 5) 

# 

/ 

; Name: 

? Location: 

7 

; Purpose: 

FE08 RMB(H.C0PY,5) 

9 

; Name: 

? Location: 

• 

9 

; Purpose: 

m 

FEOD RMB(H.CMD, 5) 

9 

; Name: 

; Location: 

• 

/ 

; Purpose: 

FE12 RMB(H.DSKF,5) 

■ 

r 

; Name: 

; Location: 

• 

t 

; Purpose: 

FE17 RMB(H.DSKI,5) 
/ 

; Name: 

; Location: 

• 

I 

; Purpose: 

FE1C RMB(H.ATTR, 5) 

t 

; Name: 

; Location: 

• 

9 

; Purpose: 

FE21 RMB(H. LSET,5) 

9 

; Name: 

; Location: 

* 

9 

; Purpose: 

FE26 RMB(H.RSET,5) 

♦ 

9 

; Name: 

; Location: 


Installs the disk driver. 


H.COPY 

MSXSTS, at the beginning of COPY (COPY 
file) routine. 

Installs the disk driver. 


H. CMD 

MSXSTS, at the beginning of CMD (CoMmanD) 
routine. 

Installs the disk driver. 


H.DSKF 

MSXSTS, at the beginning of DSKF (DiSK Free) 
routine. 

Installs the disk driver. 


H. DSKI 

MSXSTS, at the beginning of DSKI (DiSK 
Input) routine. 

Installs the disk driver. 


H.ATTR 

MSXSTS,at the beginning of ATTR$ (ATTRibute) 
routine. 

Installs the disk driver. 


H.LSET 

MSXSTS, at the beginning of LSET (Left SET) 
routine. 

Installs the disk driver. 


H.RSET 

MSXSTS, at the beginning of RSET (Right SET) 
routine. 

Installs the disk driver. 


H.FIEL 

MSXSTS, at the beginning of FIELD (FIELD) 


150 











ADVANCED PROGRAMMING GUIDE 


; Purpose: 

/ 

FE2B RMB(H.FIEL,5) 

t 

; Name: 

; Location: 

■ 

/ 

; Purpose: 

FE3 0 RMB(H.MKI$,5) 
? 

; Name: 

; Location: 

t 

i Purpose: 

FE35 RMB(H.MKS $ ,5) 
/ 

; Name: 

; Location: 

* 

f 

; Purpose: 

• 

FE3 A RMB (H. MKD$ ,5) 

f 

; Name: 

; Location: 

/ 

; Purpose: 

■ 

FE3F RMB(H. CV1,5) 

! 

; Name: 

; Location: 

• 

i 

; Purpose: 
FE44 RMB(H.CVS,5) 

t 

; Name: 

; Location: 

♦ 

i 

; Purpose: 

• 

FE49 RMB(H.CVD,5) 


routine. 

Installs the disk driver. 


H.MKI$ 

MSXSTS, at the beginning of MKI$ (MaKe Int) 
routine. 

Installs the disk driver. 


H.MKS $ 

MSXSTS, at the beginning of MKS$ (Make 
Single) routine. 

Installs the disk driver. 


H.MKD $ 

MSXSTS, at the beginning of MKD$ (Make 
Double) routine. 

Installs the disk driver. 


H.CVI 

MSXSTS, at the beginning of CVI (Convert 
Int) routine. 

Installs the disk driver. 


H. CVS 

MSXSTS, at the beginning of CVS (Convert 
Sng) routine. 

Installs the disk driver. 


H.CVD 

MSXSTS, at the beginning of CVD (Convert 
Dbl) routine. 

Installs the disk driver. 


151 










ADVANCED PROGRAMMING GUIDE 


Name: 
Location: 
Purpose: 


FE4E 


RMB(H.GETP,5) 


; Name: 

7 Location: 

; Purpose: 

FE53 RMB(H.SETF,5) 

9 

; Name: 

; Location: 

7 Purpose: 

* 

FES8 RMB (H. NOFO, 5) 


Name: 
Location: 
Purpose: 


FE5D 


RMB (H. NUL0,5) 


Name: 
Location: 
Purpose: 


FE6 2 


RMB (H. NTFL,5) 


Name: 

Location: 


; Purpose: 
FE67 RMB(H.MERGES) 

f 

; Name: 

; Location: 

? Purpose: 

FE6C RMB (H. SAVE, 5) 


; Name: 

7 Location: 

7 Purpose: 

FE71 RMB(H.BINS,5) 

♦ 

/ 

7 Name: 

7 Location: 

7 Purpose: 

FE76 RMB ( H. BINL, 5) 


H.GETP 

SPCDSK, at the GETPTR (GET file PoinTeR). 
Installs the disk driver. 


H.SETF 

SPCDSK, at the SETFIL (SET FILe pointer). 
Installs the disk driver. 


H.NOFO 

SPCDSK, at the NOFOR (NO FOR clause) routine. 
Installs the disk driver. 


H.NULO 

SPCDSK,at the NULOPN (NUL1 file OPeN)routine. 
Installs the disk driver. 


H.NTFL 

SPCDSK, at the NTFLO (NoT FiLe number 0). 
Installs the disk driver. 


H.MERG 

SPCDSK, at the MERGE (MERGE program files) 
routine. 

Installs the disk driver. 


H.SAVE 

SPCDSK, at the SAVE routine. 
Installs the disk driver. 


H.BINS 

SPCDSK, at the BINSAV (BINary SAVe) routine. 
Installs the disk driver. 


H.BINL 

SPCDSK, at the BINLOD (BINary LOaD) routine. 
Installs the disk driver. 


152 




ADVANCED PROGRAMMING GUIDE 


; Name: 

; Location: 

; Purpose: 

FE7B RMB(H.FILE,5) 

v 

/ 

; Name: 

; Location: 

; Purpose: 

FE80 RMB (H. DGET, 5) 

t 

; Name: 

; Location: 

; Purpose: 

FE85 RMB(H.FILO,5) 

9 

; Nam e: 

; Location: 


Purpose: 


FE8A 


RMB(H.INDS,5) 


? Name: 

; Location: 

; Purpose: 

FE8F RMB(H.RSLF,5) 
7 

; Name: 

; Location: 

; Purpose: 

FE94 RMB(H.SAVD,5) 


Name: 
Location: 
Purpose: 


FE99 


RMB(H.LOC, 


5) 


Name: 

Location: 

Purpose: 


FE9E 


RMB(H.LOF, 


5) 


Name: 
Location: 
Purpose: 


FEA3 


RMB(H.EOF, 


5) 


H.FILE 

SPCDSK, at the FILES command. 
Installs the disk driver. 


H. DGET 

SPCDSK, at the DGET (Disk GET) routine. 
Installs the disk driver. 


H.FILO 

SPCDSK, at the FILOUl (FILe OUt 1) routine. 
Installs the disk driver. 


H.INDS 

SPCDSK, at the INDSKC (INput DiSK Character) 
routine. 

Installs the disk driver. 


H.RSLF 

SPCDSK, to re-select the old drive. 
Installs the disk driver. 


H.SAVD 

SPCDSK, to save the current drive. 
Installs the disk driver. 


H.LOC 

SPCDSK, at the LOC (Location) function. 
Installs the disk driver. 


H. LOF 

SPCDSK, at the LOF (Length Of File)function. 
Installs the disk driver. 


H. EOF 

SPCDSK, at the EOF (End Of File) function. 
Installs the disk driver. 


153 




ADVANCED PROGRAMMING GUIDE 


; Name: 

; Location: 

; Purpose: 

• 

FEA8 RMB(H.FPOS,5) 

t 

; Name: 

; Location: 

; Purpose: 

« 

FEAD RMB(H.BAKU,5) 
/ 

; Name: 

; Location: 

♦ 

/ 

; Purpose: 

FEB2 RMB(H.PARD, 5) 
# 

; Name: 

; Location: 

; Purpose: 

FEB7 RMB(H.NODE,5) 
7 

; Name: 

; Location: 

; Purpose: 

FEBC RMB ( H. POSD, 5) 
/ 

; Name: 

; Location: 

} Purpose: 

FECI RMB ( H. DEVN, 5) 

♦ 

9 

; Name: 

; Location: 

9 

; Purpose: 

FEC6 RMB(H. GEND,5) 

i 

; Name; 

; Location: 

; Purpose: 

* 

FECB RMB (H. RUNC, 5) 

* 

9 

i Name: 

; Location: 

; Purpose: 

4 

/ 

FEDO RMB(H.CLEA,5) 


H.FPOS 

SPCDSK, at FPOS (File Position) function. 
Installs the disk driver. 


H.BAKU 

SPCDSK, at the BAKUPT (BAcK UP) routine. 
Installs the disk driver. 


H.PARD 

SPCDEV, at the PARDEV (PARse DEVice name) 
routine. 

Epands logical device names. 


H. NODE 

SPCDEV, at the NODEVN(NO DEVice Name)routine 
Sets other default devices. 


H.POSD 

SPCDEV, at the POSDSK (POSsibly DiSK)routine 
Installs the disk driver. 


H. DEVN 

SPCDEV, at the DEVNAM (DEVice NAMe) routine. 
Expands logical device names. 


H.GEND 

SPCDEV, at the GENDSP (GENeral device 
Dispatcher). 

Expands logical device names. 


H.RUNC 

BIMISC, at the RUNC (RUN Clear) routine. 


H.CLEA 

BIMISC, at the CLEARC (CLEAR Clear) routine. 


154 












ADVANCED PROGRAMMING GUIDE 


; Name: 

; Location: 

• 

9 

; Purpose: 
FED5 RMB(H.LOPD,5) 

9 

; Name: 

; Location: 

} Purpose: 

* 

FEDA RMB(H.STKE,5) 

9 

; Name: 

; Location: 
f Purpose: 

FEDF RMB(H.ISFL,5) 


; Name: 

; Location: 

; Purpose: 

9 

FEE4 RMB(H.OUTD,5) 

9 

; Name: 

; Location: 

i Purpose: 

♦ 

FEES RMB(H.CRDO,5) 

9 

? Name: 

; Location: 


i Purpose; 

FEEE RMB(H.DSKC,5) 
/ 

; Name: 

; Location: 

; Purpose: 

FEF3 RMB (H. DOGR, 5) 


Name: 
Location: 
Purpose: 


FEF8 


RMB (H. PRGE, 5) 


Name: 

Location: 

Purpose; 


H.LOPD 

BIMISC, at the LOPDFT (LOop and set DeFaulT) 
routine. 

Uses other defaults for variables. 


H. STKE 

BIMISC, at the STKERR (STacK ERRor) routine. 


H.ISFL 

BIMISC, at the ISFLIO (IS FiLe I/O) routine. 


H.OUTD 

BIO, at the OUTDO (OUT DO) routine. 


H.CRDO 

BIO, at the CRDO (CRlf DO) routine. 


R.DSKC 

BIO, at the DSKCHI (DiSK CHaracter Input) 
routine. 


H.DOGR 

GENGRP, at the DOGRPH (DO GRaPH) routine. 


H.PRGE 

BINTRP, at the PRGEND (PRoGram END) routine. 


H.ERRP 

BINTRP, at the ERRPRT (ERRor PRinT) routine. 


155 




ADVANCED PROGRAMMING GUIDE 


FEFD RMB (H. ERRP, 5) 

r 

; Name: 

; Location: 

; Purpose: 

FF02 RMB(H.ERRF, 5) 
* 
f 

; Name: 

; Location: 

; Purpose: 

FF07 RMB(H.READ, 5) 
# 

; Name: 

; Location: 

; Purpose: 

FFOC RMB(H.MAIN,5) 

i 

; Name: 

; Location: 

; Purpose: 

• 

FF11 RMB{H.DIRD,5) 
# 

; Name: 

; Location: 
j Purpose: 

FF16 RMB(H.FINI,5) 
/ 

; Name: 

; Location: 

; Purpose: 

♦ 

FF1B RMB (H. FINE, 5) 
/ 

; Name: 

; Location: 

; Purpose: 

• 

FF20 RMB(H.CRUN,5) 

f 

; Name: 

; Location: 

; Purpose: 

• 

FF25 RMB ( H. CRUS, 5) 

9 

; Name: 

; Location: 

; Purpose: 

» 

FF2A RMB(H.ISRE,5) 


BINTRP 


H. READ 

BINTRP, at the READY entry. 


H.MAIN 

BINTRP, at the MAIN entry. 


H.DIRD 

BINTRP, at the DIRDO (DIRect DO) entry. 


BINTRP 


BINTRP 


BINTRP 


BINTRP 


BINTRP 


156 












ADVANCED PROGRAMMING GUIDE 


; Name: 

? Location: 

; Purpose: 

FF2F RMB(H.NTFN,5) 

9 

; Name: 

; Location: 

; Purpose: 

♦ 

FF34 RMB(H.NOTR, 5) 

9 

; Name: 

; Location: 

; Purpose: 

FF39 RMB ( H. SNGF, 5) 

9 

; Name: 

; Location: 

; Purpose: 

FF3E RMB(H.NEWS,5) 

v 

/ 

; Name: 

; Location: 

; Purpose: 

♦ 

FF43 RMB(H.GONE,5) 

9 

t Name: 

; Location: 

; Purpose: 

FF48 RMB(H.CHRG,5) 

; Name: 

; Location: 

; Purpose: 

• 

FF4D RMB(H.RETU,5) 

r 

; Name: 

; Location: 

; Purpose: 

FF52 RMB(H.PRTF,5) 

r 

; Name: 

; Location: 

; Purpose: 


BINTRP 


BINTRP 


BINTRP 


BINTRP 


BINTRP 


BINTRP 


BINTRP 


BINTRP 


BINTRP 


FF57 RMB(H.COMP,5) 












ADVANCED PROGRAMMING GUIDE 


Name: 
Location: 
Purpose: 


FF5C 


RMB(H.FINP, 5) 


BINTRP 


Name: 
Location: 
Purpose: 


FF61 


RMB (H. TRMN, 5) 


; Name: 
j Location: 

; Purpose: 

FF66 RMB(H.FRME,5) 

9 

; Name: 

; Location: 

; Purpose: 

FF6B RMB (H. NTPL, 5) 
/ 

; Name: 

; Location: 

; Purpose: 


FF7 


RMB (H. EVAL, 5) 


BINTRP 


BINTRP 


BINTRP 


BINTRP 


Name: 

Location: 

Purpose: 


FF75 


RMB(H.OKNO,5) 


; Name: 

; Location: 

; Purpose: 

♦ 

FF7A RMB(H.FING,5) 
$ 

; Name: 

; Location: 

; Purpose: 

FF7F RMB(H.ISMI,5) 

m 

9 

; Name: 
f Location: 
j Purpose: 

FF84 RMB(H.WIDT,5) 


Name: 


BINTRP 


BINTRP 


H. ISMI 

BINTRP, at the ISMID? (IS MID$) routine. 


H.WIDT 

BINTRP, at the WIDTHS (WIDTH) routine. 


H.LIST 


158 




ADVANCED PROGRAMMING GUIDE 


; Location: 

; Purpose: 

FF89 RMB(H.LIST,5) 

f 

; Name: 

; Location: 

; Purpose: 

FF8E RMB(H.BUFL,5) 

r 

; Name: 

; Location: 

; Purpose: 

• 

9 

FF93 RMB(H.FRQ1,5) 
/ 

; Name: 

; Location: 

; Purpose: 

♦ 

FF98 RMB(H.SCNE,5) 
/ 

; Name: 

; Location: 

■ 

i 

; Purpose: 

• 

FF9D RMB(H.FRET,5) 

« 

9 

; Name: 

; Location: 

; Purpose: 

FFA2 RMB(H.PTRG,5) 

f 

; Name: 

; Location: 

; Purpose: 

FFA7 RMB(H.PH YD,5) 
* 

9 

; Name: 

; Location: 

; Purpose: 

FFAC RMB(H.FORM,5) 

♦ 

9 

; Name: 
j Location: 

; Purpose: 

« 

FFB1 RMB(H.ERRO,5) 

* 

9 

; Name: 


BINTRP, at the LIST routine. 


H.BUFL 

BINTRP, at the BUFLIN (BUFfer LINe) routine. 


H.FRQI 

BINTRP, at the FRQINT routine. 


BINTRP 


H.FRET 

BISTRS, at the FRETMP (FREe up TeMPoraries) 
routine. 


H.PTRG 

BIPTRG, at the PTRGET (PoinTeR GET) routine. 
Uses other variable names than default. 


H. PH YD 

MSXIO, at the PHYDIO (PHYsical Disk I/O). 
Installs the disk driver. 


H.FORM 

MSXIO, at the FORMAT (disk FORMATter)routine. 
Installs the disk driver. 


H.ERRO 

BINTRP, at the ERROR routine. 

Traps errors from application programs. 


H.LPTO 


159 











ADVANCED PROGRAMMING GUIDE 


; Location: 

/ 

7 Purpose: 

FFB6 RMB(H.LPTO,5) 

♦ 

i 

; Name: 

; Location: 

* 

/ 

; Purpose: 

FFBB RMB(H.LPTS,5) 

f 

; Name: 

; Location: 

; Purpose: 

FFCO RMB(H.SCRE,5) 
7 

; Name: 

; Location: 

; Purpose: 

FFC5 RMB(H.PLAY,5) 

FFCA RMB(ENDWRK,0) 


MSXIO, at the LPTOUT (Line PrinTer OUTput) 
routine. 

Uses a non-default printer. 


H.LPTS 

MSXIO, at the LPTSTT (Line PrinTer STaTus) 
routine. 

Uses a non-default printer. 


H.SCRE 

MSXSTS, at the entry to SCREEN statement. 
Expands the SCREEN statement. 


H. PLAY 

MSXSTS, at the entry to PLAY statement. 
Expands the PLAY statement. 


;End of work area. 


160 







ADVANCED PROGRAMMING GUIDE 


2.2.3 Slot Control 

[ Memory structure of MSX ] 


#0 tl #2 13 








“ 

- 


— 




— 

— 


— 


— 


_ 

B 







A 







S 

I 


— 




— 

C 







— 








<Slot #0 expand©d> <Slot II expanded> <Slot 12 expanded> <Slot #3 expanded> 



Terminology: 


Primary slot: 
Secondary slot: 
Page: 


Slot enabled by the slot select register in 
the 8255 PPI. 

Slot enabled by the expansion slot register 
at OFFFFH. 

Memory block (maximum 16K) in each slot. The 
slots are divided into four pages (0000H to 
3FFFH, 4000H to 7FFFH, 8000H to 0BFFFH , and 
0C000H to OFFFFH). 


161 





















cr 


ADVANCED PROGRAMMING GUIDE 


o Minimum configuration 

) Microsoft MSX-BASIC interpreter at slot #0 from 0000H to 7FFFH. 

) Minimum of 8K RAM from OEOOOH to OFFFFH in any slot (including 
the secondary slot) 

o RAM search procedure 

MSX-BASIC first searches for available RAM from OBFFFH down 
to 08000H (including the secondary slots), then enables the page 
with the largest available RAM. If there are more than one such 
pages, MSX-BASIC selects the leftmost page in the figure above. 
MSX-BASIC next searches for RAM from OFFFFH down to 0C000H, and 
does the same procedure. Finally, MSX-BASIC searches for a 
continuous RAM block from OFFFFH to 8000H and sets the system 
variable 'BOTTOM'. 

o PROGRAM CARTRIGE search procedure 

MSX-BASIC scans all slots (including secondary slots) from 
4000H to OBFFFH for a valid ID at the beginning of each page, 
collects information, and passes control to each page. The 
scan order is from left to right in the figure above. The 
format of the ID and other information are as follows. 

Offset from top 

+0000H r-T 

I ID I 

+0002H I-H 

I INIT I 

+0004H f-4 

I STATEMENT I 

+0006H h - 4 

I DEVICE I 

+0008H I- - 4 

I TEXT I 

+000AH h-4 

I I 

I Reserved I 
I I 

+o oi Oh >--- 


- The ID is a two-byte code used to distinguish the ROM 
cartridges from the empty pages by using 'AB' (41H,42H). 

- INIT holds the address of the initialization procedure specific 
to this cartridge. The default is 0 when no such procedure is 
necessary. Programs that need to interact with the BASIC 
interpreter should return control to it with a Z-80 'RET' 
instruction (all registers except [SP] may be destroyed). Note, 
however, that other programs (such as games) do not need to do 
this. 


162 










ADVANCED PROGRAMMING GUIDE 


- STATEMENT holds an address of the expanded statement handler 
when contained in the cartridge; the address is 0 if no handler 

is contained. If BASIC encounters a 'CALL' statement, it calls 
this address, with the statement name in the system area. 
Note the following points. (In the notes below, the [HLl regis¬ 
ter pair is called a 'text pointer'.) 

1) The cartridge must be placed at 4000H to 7FFFH. 

2) The syntax for the expanded statement is as follows. 

CALL <statement_name> I ( <arg> I ,<arg> ].. ) ] 
The keyword "CALL" can be replaced by an underscore (_). 

3) The statement name is stored in the system area, 
terminated by a 0. Since the buffer for statement name 
is of a fixed length (16 bytes), the statement name 
cannot be longer than 15 characters. 

4) If the handler for the statement is not contained within 
the cartridge, set the carry flag and return. Note that 
the text pointer must be returned unchanged. 

5) If the handler for that statement is contained within 
the cartridge, it should handle the specified function, 
update the text pointer to the end of the statement 
(Normally it would point to 0, indicating the end of the 
line, or to ': ' to indicate the end of the statement), 
and return with carry flag reset (all registers except 
tSPl may be destroyed). At the entry to the expanded 
statement handler, the text pointer should point to the 
first non-blank character after the statement name. 

- DEVICE holds the address of the expanded device handler if it is 
contained in this cartridge. The default is 0 if no handler is 
contained. BASIC calls this address with the device name in the 
system area. Note the following points. 

1) The cartridge must be placed at 4000H to 7FFFH. 

2) The device name is stored in the system area terminated 
by 0. Since the length of the statement name buffer is 
fixed (16 bytes), the device name cannot be longer than 
15 characters. 

3) Each cartridge (16K) can have up to 4 logical devices. 

4) When BASIC encounters an unidentifiable device name, it 
it calls the DEVICE entry with OFFH in [Acc]. If the 
specified device handler is not contained within the 
cartridge, the carry flag should be set upon return. If 
the specified device handler is contained inside, the 
device ID (0 to 3) should be returned in [Acc], and the 


163 



ADVANCED PROGRAMMING GUIDE 


carry should be reset. All registers may be destroyed. 


5) Real I/O operations take place when a DEVICE entry 
is entered with one of the following values in [Acc]. 


0 Open 

2 Close 

4 Random I/O 

6 Sequential output 

8 Sequential input 

10 LOC function 

12 LOF function 

14 EOF function 

16 FPOS function 

18 Back up a character 


Device ID is passed in the system variable 'DEVICE'. 


- TEXT holds the beginning address of the (tokenized) BASIC text 
contained in the cartridge. The default is 0 when no such text 
is inside. BASIC regards this as the beginning address of BASIC 
text, sets pointer there, and begins execution of the program. 
Note the following points. 

1) When there is more than one such slot, only the 
leftmost one (in the figure above) is enabled and 
executed. 


2) The cartridge must be placed at 8000H to OBFFFH, thus 
the maximum length of BASIC text cannot exceed 16K 
bytes. 

3) Even if there is a RAM block at 8000H to OBFFFH, it can¬ 
not be used. 

4) The address pointed to by the TEXT entry must contain 
a zero. 

5) The line numbers (for statements which reference line 
numbers, such as GOTO and GOSUB) should be translated to 
pointers in advance because they are not converted to 
pointers during execution. Note that while they CAN be 
line numbers, the execution would be slower. 

Note: INIT, STATEMENT, DEVICE and TEXT are placed with the low 

order byte first. 


164 



ADVANCED PROGRAMMING GUIDE 


o How slot information is kept in the system area 

EXPTBL - Indicates which slot is expanded. 

EXPTBL: DS 1 ;for slot #0 

DS 1 ;for slot #1 

DS 1 ;for slot #2 

DS 1 ffor slot #3 

Each entry in the EXPTBL holds 80H if expanded, 0 if 
not expanded. 

SLTTBL - Indicates the value currently output to the expansion 
slot register. Valid only when corresponding EXPTBL 
holds 80H. 

SLTTBL: DS 1 ;for slot #0 

DS 1 ;for slot #1 

DS 1 ;for slot #2 

DS 1 ;for slot #3 

SLTATR - Holds attributes for each page. 

SLTATR: DS 64 

Each byte in the SLTATR table corresponds to each page. 
Bits are assigned as follows. 

XXXXXXXX 
I I I I I I II 

I I I I I I I *—Unused 
MINI 1 —Unused 

Mill 1 -Unused 

I l I I i-Unused 

I I I 1 -Unused 

I l 1 -Statement expander inside 

I i-Device expander inside 

L -BASIC text inside 

SLTWRK - Holds working storage for each page. 

SLTWRK: DS 128 

Each word in the SLTWRK table can be exclusively used 
by each page. The use of this work area depends entirely 
on the page. 


165 









ADVANCED PROGRAMMING GUIDE 


o Usage of hooks 

Hooks are one of the methods in which MSX-BASIC can be expanded. 
Some procedures (such as 'console input', 'console output') 
have a Z-80 'CALL' instruction directed to the common RAM area. 
The areas consist of a five-byte storage area per hook, and are 
initialized with five Z-80 'RET' instructions upon cold start. 
Expansion is done by redirecting this entry elsewhere. 


Example: 


CALL HOOKxx 


in ROM 


HOOKxx: RET 
RET 
RET 
RET 
RET 


HOOKxx: RST 6 

DB <Slot-address> 

in RAM DW <Memory-address> 

RET 


RST 6 performs an inter-slot call to a different slot. 
Refer to BIOENT.MAC for further details of the interslot 
call facility. 


To connect the hook to the desired routine, the routine 
must determine its location (slot). This is important 
because the routine's slot location is unpredictable. 
This is done by the following procedure. 


RSLREG 

EQU 

138H 

EXPTBL 

EQU 

0FCC1H 

B8000 

EQU 

1 



CALL 

RRC 

RRC 

RSLREG 

IF 

B8000 

RRC 

RRC 


ENDIF 

AN I 

11B 


MOV 

C, A 


MV I 

B, 0 


LX I 

H,EXPTBL 


DAD 

B 


ORA 

M 


MOV 

C, A 


INX 

H 


INX 

H 


;Set this true if the 
rprogram resides at 

;8000 . . OBFFPH 
;Read primary slot # 
;Move it to bit 0,1 
;of [Acc] 


;See if this slot is 
; expanded or not 
;Set MSB if so 

?Point to SLTTBL entry 


166 



ADVANCED PROGRAMMING GUIDE 


INX 

H 

INX 

H 

MOV 

A, M 


IF 

B8000 

RRC 

RRC 


ENDIF 

AN I 

1100B 


ORA 

c 


RET 



Get what is currently 
output to expansion 
slot register 

Move it to bit 2,3 
of [Acc] 


Finally form slot 
address 


< CAUTION > 


A machine language program in a cartridge must be able to run 
in any slot (including secondary slots). The slot for running 
the cartridge is unpredictable. 


167 



ADVANCED PROGRAMMING GUIDE 


o Usage of USR function 

There are 10 USR functions, USRO through USR9. USRO can be 
abbreviated as USR. The address for a USR function jump is 
defined as follows. 

DEFUSRO=&HEOOO (This can be DEFUSR=&HE000) 

DEFUSR3 *=&HE023 

The USR functions can be invoked as follows. 

A=USR0(12) (This can also be A=USR(12)) 

PRINT USR("ABCD")+" This is a test" 

The USR function parameters are passed to the machine language 
programs in the following manner. 

Integer 

When USR is called as an integer function, the address 
0F663H contains 2, and its value is located at 0F7F8H 
and 0F7F9H, with the lower byte first. 

String 

When USR is called as a string function, the address 
0F663H contains 3, and its string descriptor is located 
at 0F7F8H and 0F7F9H. String descriptors consist of 
three bytes, the first byte is the length of string, the 
second and third are the address of the string. 

Single-precision 

When USR is called as a single-precision function, the 
address 0F663H contains 4, and its value is located at 
0F7F6H to 0F7F9H. 

Double-precis!on 

When USR is called as a double—precision function, the 
address 0F663H contains 8, and its value is located at 
0F7F6H to 0F7FDH. 


168 



ADVANCED PROGRAMMING GUIDE 


The value from a USR function can be returned to BASIC in the 
following manner. 

Integer 

The data at the address 0F663H should be set to 2. The 

value should be placed in 0F7F8H and 0F7F9H, with the 

lower byte first. 

String 

The data at the address 0F663H should be set to 3. The 

address of the string descriptor should be placed in 

0F7F8H and 0F7F9H. String descriptors consist of three 
bytes, the first byte is set to the string length, the 
second and third bytes indicate the string address. 


Single-precision 

The data at the address 0F663H should be set to 4. The 
value should be placed in 0F7F6H through 0F7F9H. 

Double-precision 

The data at the address 0F663H should be set to 8. The 
value should be placed in 0F7F6H through 0F7FDH. 


169 



ADVANCED PROGRAMMING GUIDE 


o How to allocate work area for cartridges 

If the program is stand-alone (i.e., does not need to run with 
other programs in other cartridges), all RAM area below the 

fixed work area for BIOS (i.e., below 0F380H) is free. However, 

if the program must run with the BASIC interpreter and programs 
in other cartridges, the RAM usage is restricted. 

There are three ways to allocate RAM to be used exclusively 
by each cartridge. 

1) Put RAM on the cartridge. (Easiest and best) 

2) If the work area is less than 3 bytes, use SLTWRK. 

3) If the work area is greater than 2 bytes, make SLTWRK point 

to the system variable BOTTOM (0FC48H), then update it by 
the amount of memory required. BOTTOM is set by the 
initialization code to point to the bottom of the RAM. 

Exam pi e: 


Program 

is at 

4000H to 7FFFH 


SIZE 

EQU 

??? 

;Size of memory required 

RSLREG 

EQU 

138H 

EXPTBL 

EQU 

0FCC1H 


BOTTOM 

♦ 

EQU 

0FC48H 


I 

CALL 

RSLREG 

;Read primary slot # 


RRC 


;Move it to bit 0,1 


RRC 


;of tAcc] 


AN I 

00000011B 



MOV 

C, A 



MV I 

B, 0 



LXI 

H,EXPTBL 

;See if this slot is 


DAD 

B 

;expanded or not 


ADD 

A 



ADD 

A 



ADD 

A 



ADD 

A 



MOV 

C, A 



MOV 

A, M 



ADD 

A 



SBB 

A 

;Form mask pattern 


AN I 

00001100B 


INX 

H 

;Point to SLTTBL entry 


INX 

H 


INX 

H 



INX 

H 



ANA 

M 

;Get what is currently 
;output to expansion 




;slot register 


ORA 

C 



170 



ADVANCED PROGRAMMING GUIDE 


ORI 00000001B 

Now, we have the sequence number for this 
cartridge as follows. 

OOPPSSBB 


111111 

1 1 1 1 ‘■ J — Higher 2 bits 

of memory address 

1 1 LJ — 

- Secondary slot # (0..3) 

j-j- 

- Primary slot 

# (0..3) 

ADD 

A 

;Double since word table 

MOV 

C, A 


MV I 

B, 0 

;Point to entry in 

LXI 

H, SLTWRK 

DAD 

B 

;SLTWRK table 

LB CD 

BOTTOM 

;Get current RAM bottom 

MOV 

M, C 

;Register this 

INX 

H 


MOV 

M, B 


LXI 

H,SIZE 


DAD 

B 


MOV 

A, H 

;Beyond OEFFFH? 

CPI 

OFOH 

j Too much RAM required? 

JRNC 

NOROOM 

;Yes, cannot allocate 

SHLD 

RET 

BOTTOM 


BOTTOM 

became greater 

than OEFFFH, there is 

no RAM 

left to be allocated. 


NOROOM: ;Print messages or 

;something like that 


171 







Note that a pulse begins in the low state when it is being 
written. 


172 



ADVANCED PROGRAMMING GUIDE 


B. Header 


There are two kinds of headers; long headers and short headers. 
The long header is used for the file header, and the short 
header is used for the body of the file. 


I 1200 baud ] 

Long header 16000 x 2400 Hz 

Short header 4000 x 2400 Hz 

C 2400 baud ] 


Long header 32000 x 4800 Hz 
Short header 8000 x 4800 Hz 

The baud rate is determined when reading the header. 


C. Data 

Data is composed of one 'O' (Start bit) followed by an 8-bit 
data stream, and is followed by two 1 l's (Stop bits). The 
sequence of the data is from the least significant bit (LSB) to 
the most significant bit (MSB). When reading from cassette, 
the software measures the number of transitions during 3/4 
of the baud rate. The result should be a 1 when reading a space, 
or 2 or 3 when reading a mark. 


173 



ADVANCED PROGRAMMING GUIDE 


o Logical Format 

There three file types (also called file attributes) supported 
in MSX-BASIC. These file types, or attributes, are: BASIC text 
files, ASCII text files, and machine language files. 


A. BASIC Text File Format 

[ File header ] 

Long header 
10 x 0D3H 

File name (6 bytes) 

[ File body ] 

Short header 
Tokenized BASIC text 
7 x 00H 


B. ASCII Text File Format 

Long header 
10 x OEAH 

File name (6 bytes) 

t File body ] 

Short header 
256 x data 
Short header 
256 x data 
Short header 
256 x data 


Short header 

256 x data (includes Control-Z) 


174 



ADVANCED PROGRAMMING GUIDE 


C. Machine Language Pile Format 

[ File header ] 

Long header 
10 x 0D0H 

File name (6 bytes long) 

[ File body 1 

Short header 

Load start address (1 word) 

Load end address (1 word) 
Execution start address (1 word) 
Machine language program 


175 



ADVANCED PROGRAMMING GUIDE 


o Related BIOS Entries 


Name: 
Function: 
Entry: 
Returns: 
Modifies: 


TAPION (OOE1H) 

Sets the cassette motor on and reads tape header 
None 

Carry flag is set if aborted 
All 


Name: 
Function: 
Entry: 
Returns: 
Modifies: 


TAPIN (00E4H) 

Reads data from tape 
None 

Data in [ACC], carry flag is set if aborted 
All 


Name: 
Function: 
Entry: 
Returns: 
Modifies: 


TAPIOF (00E7H) 

Stops reading from tape 

None 

None 

None 


Name: TAPOON {OOEAH) 

Function: Sets the motor on and writes the tape header 

block onto cassette 

Entry: [ACC] will contain a non-zero value if a long 

header is desired, zero if a short header is 
desired 

Returns: Carry flag is set if aborted 

Modifies: All 


Name: 
Function: 
Entry: 
Returns: 
Modifies: 


TAPOUT (OOEDH) 

Writes data to tape 
Data to be output in [ACCl 
Carry flag is set if aborted 
All 


Name: TAPOOF (OOFOH) 

Function: Stops writing to tape 

Entry: None 

Returns: None 

Modifies: None 

[NOTES] 

All of the above routines must be entered with the interrupts 
disabled. 

Because the above pulses are software-generated, all of the 
above routines must be called using the same time intervals as 
when using BASIC. 


176 



ADVANCED PROGRAMMING GUIDE 


2.2.5 MSX Printer Specifications 

This document summarizes the requirements for the dot matrix 
printers connected to MSX computers. 

A. Character Set 

The MSX printer should have the same character set that the MSX 
computer has. This is a character set with codes of 00 to FE. 
The graphics characters (codes between 00H and 1FH) are 
represented by two-byte code sequence, preceded by 01H, then 
followed by the code itself, added to an offset of 40H. 

Example: 

To print a character with the code 02H, first send 01H, the 
graphic header, then send 42H, the sum of the code (02H) and 
the offset (4QH) . 

This rule is the same as when sending characters to the screen. 


B. Control Codes 

The MSX printer supports codes in the format of the NEC PC-8023 
printer. The minimum requirements for the MSX printer are as 
follows: 

0A - Line feed 

0C - Form feed (Recommended page length: 66 lines/page) 

OD - Carriage return 

ESC+"A" - 1/6" line spacing for 8-pin printers, or place a 
space between lines. 

ESC+"B" - 1/8' line spacing for 8-pin printers, or place no 
space between lines. 

ESC+"Snnnn" - Dot image print. <nnnn> represents the number 
of to follow, in ASCII decimal characters. 


If the printer has a line buffer, the following control 
character initiates printing of the contents of the line buffer. 

OD - Carriage return / Print contents of buffer 


177 



ADVANCED PROGRAMMING GUIDE 


C. Non-MSX Printers 

MSX-BASIC has a switch in the 5th parameter of the SCREEN 
statement. When this is set to 1, MSX-BASIC assumes that the 
printer connected to the system has no such capabilities as 
described above. In this mode, MSX-BASIC converts those 
characters with codes between 00 to 1FH to blanks. The default 
value of this switch is 00, meaning that the MSX printer is 
connected. 


D. Control Functions for the PC-8023 Printer 


Control 

Code (Hex) Function 


8 8 Back space 

9 9 Horizontal TAB 

10 A Line feed 

11 B Vertical TAB 

12 C Form feed 

13 D Carriage return 

14 E Double width 

15 F Normal width 

27 IB Escape character 

29 ID Vertical form control setting start 

30 IE Vertical form control setting end 

31 IF +chr$(16+n) l<=n<=15 N lines feed 

+chr$(n) 2<=n<=6 Vertical tab channel select 


178 




ADVANCED PROGRAMMING GUIDE 


ESC + Control 

Code Function 


1~6 Dot spacing 

1 Enhanced print 

" Cancel enhanced mode 


a Alphanumerics/Hiragana 

$ Alphanumerics/Katakana 


A 

B 

T+"nn" 


1/6" feed 
1/8" feed 
n/144" feed 


N 

P 

E 

Q 


Normal spacing (10 CPI) 

Proportional spacing (20 CPI) 

Double density dot spacing in graphic print 
Elite spacing (12 CPI) 

Condensed spacing, 136 characters/line 


L+"nnn" Set left margin 


S+"nnnn" Bit image print (nnnnsnumber of dots follow) 


X Start under line 

Y End under line 


r Reverse feed 

f Forward feed 


[ 

] 


Incremental printing.BS erases last character sent 
Logical seeking bidirectional print. A chr$(24) 
cancels the line sent. 


(+"nnn",,,. 
)+"nnn",,,. 
2 


Set horizontal tab 

Clear horizontal tab (specified position only) 
Clear all the horizontal tab position 


179 




180 



PART C 

EXPANDED MSX SYSTEM SOFTWARE 



MSX-DOS USER'S GUIDE 


3. MSX-DOS 


MSX-DOS is a disk operating system for MSX computers. The system 
with its compatibility to other versions of MS-DOS will surely 
provide you a comfortable environment around. All Microsoft 
languages (BASIC Interpreter, BASIC Compiler, FORTRAN, COBOL, 
Pascal) will be available under MSX-DOS. Users of MSX-DOS are 
assured that their operating system will be the first that 
Microsoft will support when any new products or major releases are 
announced. 


3.1 MSX-DOS User's Guide 


3.1.1 System Requirements 

The MSX-DOS operating system requires a MSX microcomputer system 
with 64k bytes of memory (RAM) and at least one disk drive. 

The MSX-DOS disk contains the following files: 

File Name Function of File 

COMMAND.COM MSX-DOS command processor 

MSXDOS.SYS MSX-DOS operating system 

3.1.2 Getting Started 

Once MSX-DOS has been loaded, the system searches the MSX-DOS 
disk for the COMMAND.COM file and loads it into memory. The 
OOMMAND.COM file is a program that processes the commands you 
enter and then runs the appropriate programs. It is also called 
the command processor. 

When the command processor is loaded, you will see the following 
display on your screen (the underscore represents the cursor): 

MSX-DOS Version 1.00 
Copyright 1984 by Microsoft 

Command version 1.00 

Current date is Sun 1-01-1984 
Enter new date: _ 

NOTE 

The date format (mm-dd-yy) may 
be changed depending on 
versions. For example, it is 
"yy-mm-dd" in Japanese version. 


182 



MSX-DOS USER'S GUIDE 


Any date is acceptable in answer to the new date prompt as long as 
it follows the above format. Separators between the numbers can 
be hyphens (-) or slashes (/). 

After you have answered the new time prompt, the MSX-DOS 
A>_ 

will be displayed. 

It tells you that MSX-DOS is ready to accept commands. If you 
have inserted the MSX-DOS disk into a drive other than A, the 
command processor prompt will reflect that drive (for example, B>). 
However, usually you will load MSX-DOS in drive A. 

The A in the previous prompt represents the default disk drive. 
This means that MSX-DOS will search only the disk in drive A for 
any filenames you may enter and will write files to that disk 
unless you specify a different drive. You can ask MSX-DOS to 
search the disk in drive B by changing the drive designation or by 
specifying B: in a command. To change the disk drive designation, 
enter the new drive letter followed by a colon. For example: 

A> (MSX-DOS prompt) 

A>B: (you have typed B: in response to 
the prompt) 

B> (system responds with B> and drive B 
is now the default drive) 

The system prompt B> will appear and MSX-DOS will search only the 
disk in drive B until you specify a different default drive. 

If you have only one disk drive attached to your computer, turn to 
3.1.14 'Instructions for Users with Single-Drive Systems', for 
important information. 

A filename can be from 1 to 8 characters long. The filename 
extension can be three or fewer characters. You can type any 
filename in small or capital letters and MSX-DOS will translate 
these letters into uppercase characters. 

In addition to the filename and the filename extension, the 
name of your file may include a drive designation. A drive 
designation tells MSX-DOS to look on the disk in the designated 
drive to find the filename typed. 


183 



MSX-DOS USER'S GUIDE 


The following characters are allowed for file names and their 
extensions. 

A-Z 0-9 $ & # 

% ' ( ) - @ 

¥ ~ j ~ ' i backslash instead of Yen sign 

in international versions.) 

The term file specification (or filespec) will be used in this 
book to indicate the following filename format: 

[<drive designation:>]<filename>[<.filename extensions 

3.1.3 Wild Cards 

Two special characters (called wild cards) can be used in 
filenames and extensions: the asterisk (*) and the question mark 
(?). These special characters give you greater flexibility when 
using filenames in MSX-DOS commands. 

o The ? Wild Card 

A question mark (?) in a filename or filename extension indicates 
that any character can occupy that position. For example, the 
MSX-DOS command 

DIR TEST?RUN.COM 

will list all directory entries on the default drive that have 8 
characters, begin with TEST, have any next character, end with the 
letters RUN, and have a filename extension of .COM. 

o The * Wild Card 

An asterisk (*) in a filename or filename extension indicates that 
any character can occupy that position or any of the remaining 
positions in the filename or extension. 

For example: 

DIR TEST*. COM 

will list all directory entries on the default drive with 
filenames that begin with the characters TEST and have an 
extension of .COM. 

The wild card designation *.* refers to all files on the disk. 
Note that this can be very powerful and destructive when used in 
MSX-DOS commands. For example, the command DEL *.* deletes all 
files on the default drive, regardless of filename or extension. 


184 



MSX-DOS USER'S GUIDE 


3.1.4 Illegal File Names 

MSX-DOS treats some device names specially, and certain 3- 

letter names are reserved for the names of these devices. These 

3-letter names cannot be used as filenames or extensions. You 

must not name your files any of the following: 

AUX Used when referring to input from or output to an 

auxiliary device (such as a printer or disk drive). 

CON Used when referring to keyboard input or to output to the 
terminal console (screen). 

LST or 

PRN Used when referring to the printer device. 

NUL Used when you do not want to create a particular file, 

but the command requires an input or output filename. 


Even if you add device designations or filename extensions to 
these filenames, they remain associated with the devices listed 
above. For example, AsCON.XXX still refers to the console and is 
not the name of a disk file. 


185 



MSX-DOS USER'S GUIDE 


3.1.5 Directories 

The directory also contains information on the size of the files, 
their locations on the disk, and the dates that they were created 
and updated. 


3.1.6 Types of MSX-DOS Commands 
There are two types of MSX-DOS commands: 

Internal commands 
External commands 

Internal commands are the simplest, most commonly used commands. 
You cannot see these commands when you do a directory listing on 
your MSX-DOS disk; they are part of the command processor. When 
you type these commands, they execute immediately. The following 
internal commands are described in 3.2. 


BASIC DIR 

COPY FORMAT 

DATE MODE 

DEL (ERASE) PAUSE 


REM 

REN (RENAME) 

TIME 

TYPE 

VERIFY 


External commands reside on disks as program files. They must be 
read from disk before they can execute. If the disk containing 
the command is not in the drive, MSX-DOS will not be able to find 
and execute the command. 

Any filename with a filename extension of .COM or .BAT is 
considered an external command. For example, programs such as 
FILCON.COM and COMP.COM are external commands. Because all 
external commands reside on disk, you can create commands and add 
them to the system. Programs that you create with most languages 
(including assembly language) will be .COM (executable) files. 

When you enter an external command, do not include its filename 
extension. 


186 



MSX-DOS USER'S GUIDE 


3.1.7 Command Options 

Options can be included in your MSX-DOS commands to specify 
additional information to the system. If you do not include some 
options, MSX-DOS provides a default value. 

The following is the format of all MSX-DOS commands: 

Command [options...] 

where: 


switches 


arguments 


filespec 


d: 


filename 


. ext 


Switches are options that control MSX-DOS 
commands. They are preceded by a slash 
(for example, /P). 

Provide more information to MSX-DOS commands. 
You usually choose between arguments; for 
example, ON or OFF. 

Refers to an optional drive designation, a 
filename, and an optional three letter 
filename extension in the following format: 

[<d:>]<filename>[<.ext>] 

Refers to a disk drive designation. 

Refers to any valid name for a disk file, 
including an optional filename extension. 
The filename option does not refer to a 
device or to a disk drive designation. 

Refers to an optional filename extension 
consisting of a period and 1-3 characters. 
When used, filename extensions immediately 
follow filenames. 


187 



MSX-DOS USER'S GUIDE 


3.1.8 Information Common to All MSX-DOS Commands 

The following information applies to all MSX-DOS commands: 

o Commands are usually followed by one or more 

options. 

o Commands and options may be entered in uppercase or 
lowercase, or a combination of keys. 

o Commands and options must be separated by 

delimiters. Because they are easiest, you will 
usually use the space and comma as delimiters. For 
example: 

DEL MYFILE.OLD NEWFILE.TXT 
RENAME, THIS FILE THATFILE 

You can also use the semicolon (;), the equal 
sign (=), or the tab key as delimiters in MSX-DOS 
commands. 

o Do not separate a file specification with 

delimiters, since the colon and the period already 
serve as delimiters. 

o When instructions say "Strike a key when ready", 
you can press any key except <CONTROL-C>. 

o You must include the filename extension when 

referring to a file that already has a filename 
extension. 

o You can abort commands when they are running by 

pressing <CONTROL-C>. 

o Commands take effect only after you have pressed 

the <RETURN> key. 

o Wild cards (global filename characters) and device 

names (for example, PRN or CON) are not allowed in 
the names of any commands. 

o When commands produce a large amount of output on 

the screen, the display will automatically scroll 
to the next screen. You can press <CONTROL-S> to 
suspend the display. Press any key to resume the 
display on the screen. 

o MSX-DOS editing and function keys can be used 

when entering commands. Refer to 3.1.13 MSX-DOS 
Editing and Function Keys, for a complete 
description of these keys. 


188 



MSX-DOS USER'S GUIDE 


o The prompt from the command processor is the 
default drive designation plus a right angle 
bracket (>); for example, A>. 

o Disk drives will be referred to as source drives 
and destination drives. A source drive is the 
drive you will be transferring information from. A 
destination drive is the drive you will be 
transferring information to. 

3.1.9 Batch Processing 

With MSX-DOS, you can put the command sequence into a special 
file called a batch file, and execute the entire sequence simply 
by typing the name of the batch file. "Batches" of your commands 
in such files are processed as if they were typed at a terminal. 
Each batch file must be named with the .BAT extension, and is 
executed by typing the filename without its extension. 

Two MSX-DOS commands are available for use expressly in batch 
files: REM and PAUSE. REM permits you to include remarks and 

comments in your batch files without these remarks being executed 
as commands. PAUSE prompts you with an optional message and 
permits you to either continue or abort the batch process at a 
given point. 


189 



MSX-DOS USER'S GUIDE 


The following list contains information that you should read 
before you execute a batch process with MSX-DOS: 


o Do not enter the filename BATCH (unless the name of 
the file you want to execute is BATCH.BAT). 

o Only the filename should be entered to execute the 
batch file. Do not enter the filename extension. 

o The commands in the file named <filename>.BAT are 
executed. 

o If you press <CONTROL-C> while in batch mode, this 
prompt appears: 

Terminate batch job (Y/N)? 

If you press Y, the remainder of the commands in 
the batch file are ignored and the system prompt 
appears. 

If you press N, only the current command ends and 
batch processing continues with the next command in 
the file. 

o if you remove the disk containing a batch file 
being executed, MSX-DOS prompts you to insert 
it again before the next command can be read. 

o The last command in a batch file may be the name of 
another batch file. This allows you to call one 
batch file from another when the first is finished. 

3.1.10 The AUTOEXEC.BAT Pile 

When you start MSX-DOS, the command processor searches the MSX-DOS 
disk for a file named AUTOEXEC.BAT. The AUTOEXEC.BAT file is a 
batch file that is automatically executed each time you start the 
system. 

If MSX-DOS finds the AUTOEXEC.BAT file, the file is immediately 
executed by the command processor and the date prompts are 
bypassed. 

If MSX-DOS does not find an AUTOEXEC.BAT file when you first load 
the MSX-DOS disk, then the date and time prompts will be issued. 


190 



MSX-DOS USER'S GUIDE 


3.1.11 How To Create a Batch Pile 

If, for example, you wanted to automatically load BASIC and run a 
program called MENU each time you started MSX-DOS, you could 
create an AUTOEXEC.BAT file as follows: 

1. Type: 

COPY CON: AUTOEXEC.BAT 

This statement tells MSX-DOS to copy the 
information from the console (keyboard) into the 
AUTOEXEC.BAT file. Note that the AUTOEXEC.BAT 
file must be created in the root directory of 
your MSX-DOS disk. 

2 . Now ty pe: 

BASIC MENU 

This statement goes into the AUTOEXEC.BAT file. 
It tells MSX-DOS to load BASIC and run the MENU 
program whenever MSX-DOS is started. 

3. Press the <CONTROL-Z> key; then press the <RETURN> 

key to put the command BASIC MENU in the 

AUTOEXEC.BAT file. 

4. The MENU program will now run automatically 

whenever you start MSX-DOS. 

To run your own BASIC program, enter the name of your program 
in place of MENU in the second line of the example. You can enter 
any MSX-DOS command or series of commands in the AUTOEXEC.BAT file. 


NOTE 

Remember that if you use 
an AUTOEXEC.BAT file, MSX-DOS 
will not prompt you for a 
current date unless you 
include the DATE command 
in the AUTOEXEC.BAT file. 
It is strongly recommended 
that you include this command 
in your AUTOEXEC.BAT file, 
since MSX-DOS uses this 
information to keep your 
directory current. 


191 



MSX-DOS USER'S GUIDE 


3.1.12 Replaceable Parameters in .BAT Files. 

There may be times when you want to create an application program 
and run it with different sets of data. These data may be stored 
in various MSX-DOS files. 

When used in MSX-DOS commands, a parameter is an option that you 
define. With MSX-DOS, you can create a batch (.BAT) file with 
dummy (replaceable) parameters. These parameters, named %0-%9, 
can be replaced by values supplied when the batch file executes. 

For example, when you type the command line COPY CON MYFILE.BAT, 
the next lines you type are copied from the console to a file 
named MYFILE.BAT on the default drive: 

A>COPY CON MYFILE.BAT 
COPY %1.MAC %2.MAC 
TYPE %2.PRN 
TYPE % 0.BAT 

Now, press <CONTROL-Z> and then press <RETURN>. MSX-DOS responds 
with this message: 

1 File(s) copied 
A>_ 

The file MYFILE.BAT, which consists of three commands, now resides 
on the disk in the default drive. 

The dummy parameters %1 and %2 are replaced sequentially by the 
parameters you supply when you execute the file. The dummy 
parameter %0 is always replaced by the drive designator, if 
specified, and the filename of the batch file (for example, 
MYFILE) . 


NOTES: 


1. Up to 10 dummy parameters (%0—%9) can be specified. 

2. If you use the percent sign as part of a filename 
within a batch file, you must type it twice. For 
example, to specify the file ABC%.COM, you must 
type it as ABC%%.COM in the batch file. 


192 



MSX-DOS USER'S GUIDE 


To execute the batch file MYFILE.BAT and to specify the parameters 
that will replace the dummy parameters/ you must enter the batch 
filename (without its extension) followed by the parameters you 
want MSX-DOS to substitute for %1, %2, etc. 

Remember that the file MYFILE.BAT consists of 3 lines: 

COPY %1.MAC %2.MAC 
TYPE % 2.PRN 
TYPE % 0.BAT 

To execute the MYFILE batch process, type: 

MYFILE A:PR0G1 B:PR0G2 

MYFILE is substituted for %0, A;PROGl for %1, and B:PROG2 for %2. 

The result is the same as if you had typed each of the commands 
in MYFILE with their parameters, as follows: 

COPY A:PR0G1.MAC B:PROG2.MAC 
TYPE B:PROG2.PRN 
TYPE MYFILE.BAT 

The following table illustrates how MSX-DOS replaces each of the 
above parameters: 

BATCH PARAMETER1 (%0) PARAMETER2 (%1) PARAMETER3 (%2) 

FILENAME (MYFILE) (PR0G1) (PROG2) 

MYFILE MYFILE.BAT PROG1.MAC PROG2.MAC 

PROG2.PRN 


Remember that the dummy parameter %0 is always replaced by the 
drive designator (if specified) and the filename of the batch file. 


193 



MSX-DOS USER'S GUIDE 


3.1.13 MSX-DOS Editing and Function Keys 
Special MSX-DOS Editing Keys 
Control Character Functions 
3.1.13.1 Special MSX-DOS Editing Keys 

The special editing keys deserve particular emphasis because they 
depart from the way in which most operating systems handle command 
input. You do not have to type the same sequences of keys 
repeatedly, because the last command line is automatically placed 
in a special storage area called the template. 

By using the template and the special editing keys, you can take 
advantage of the following MSX-DOS features: 


o A command line can be instantly repeated by 
pressing two keys. 

o If you make a mistake in the command line, you can 
edit it and retry without having to retype the 
entire command line. 

o A command line that is similar to a preceding 
command line can be edited and executed with a 
minimum of typing by pressing special editing keys. 


194 



MSX-DOS USER'S GUIDE 


When you type a line to the system call OAH (buffered line input) 
and press the RETURN key, the line is returned to the caller of 
the system call. This line is copied to the new template. You 
can now recall the last line or modify it with MSX-DOS special 
editing keys. 

The relationship between the command line and the template is 
shown in the next figure. 


User Input 


Command Line < -» Template 

i p 

COMMAND.COM 


Command Line and Template 


195 



MSX-DOS USER’S GUIDE 


I NAME I 


FUNCTION 


COPY1 


RIGHT ARROW 
~Y (*) 


Copies one character from the 
template to the new line. 


COPYUP 


SELECT 

"X 


Copies all characters from 
the template to the new line, 
up to the character specified. 


COPYALL 


DOWN ARROW 


Copies all remaining characters 
in the template to the new 
1 ine. 


SKI PI 


Skips over (does not copy) 
a character in the template. 


SKI PUP 


Skips over (does not copy) 
the characters in the template, 
up to the character specified. 


VOID 


UP ARROW 
ESCAPE 


Voids the current input. Leaves 
the template unchanged. 


LEFT ARROW 


Deletes the last character 
typed. 


INSERT 


insert 


Enters/exits insert mode. 


NEWLINE 


home 


Makes the current line 
new template. 


Japanese. 


‘\ in all other versions. 


196 


















MSX-DOS USER'S GUIDE 


Example: 

If you type the following command 
DIR PROG.COM 

MSX-DOS displays information about the file PROG.COM on your 
screen. The command line is also saved in the template. To 
repeat the command, just press two keys: <C0PYALL> and <RETURN>. 

The repeated command is displayed on the screen as you type, as 
shown below: 

<COPYALL>DIR PROG.C0M<RETURN> 

Notice that pressing the <C0PYALL> key causes the contents of the 
template to be copied to the command line; pressing <RETURN> 
causes the command line to be sent to the command processor for 
execution. 

If you want to display information about a file named PROG.ASM, 
you can use the contents of the template and type: 

<C0PYUP>C 

Typing <C0PYUP>C copies all characters from the template to the 
command line, up to but not including "C". MSX-DOS displays: 

DIR PROG._ 

Note that the underline is your cursor. Now type: 

.ASM 

The result is: 

DIR PROG.ASM_ 

The command line "DIR PROG.ASM" is now in the template and ready 
to be sent to the command processor for execution. To do this, 
press <RETURN>. 

Now assume that you want to execute the following command: 

TYPE PROG.ASM 
To do this, type: 

TYPE<INSERT> <COPYALLXRETURN> 

Notice that when you are typing, the characters are entered 
directly into the command line and overwrite corresponding 
characters in the template. This automatic replacement feature 
is turned off when you press the insert key. Thus, the characters 
"TYPE" replace the characters "DIR " in the template. To insert 


197 



MSX-DOS USER'S GUIDE 


a space between "TYPE" and "PROG.ASM”, you press <INSERT> and then 
the space bar. Finally, to copy the rest of the template to the 
command line, you press <COPYALL> and then <RETURN>. The command 
"TYPE PROG.ASM" will be processed by MSX-DOS, and the template 
becomes "TYPE PROG.ASM". 

If you had misspelled "TYPE” as "BYTE", a command error would have 
occurred. Still, instead of throwing away the whole command, you 
could save the misspelled line before you press <RETURN> by 
creating a new template with the <NEWLINE> key: 

BYTE PROG. ASM<NEWLINE> 

You could then edit this erroneous command by typing: 
T<COPYl>P<COPYALL> 

The <COPYl> key copies a single character from the template to the 
command line. The resulting command line is then the command that 
you want: 

TYPE PROG.ASM 

As an alternative, you can use the same template containing BYTE 
PROG.ASM and then use the <SKIP1> and <INSERT> keys to achieve the 
same result: 

<SKIP1XSKIP1><C0PY1XINSERT>YP<C0PYALL> 

To illustrate how the command line is affected as you type, 
examine the keys typed on the left; their effect on the command 
line is shown on the right: 


<SKIP1> 

<SKIP1> 

<C0PY1> 

<INSERT>YP 

<COPYALL> 


_ Skips over 1st template character 

_ Skips over 2nd template character 

T Copies 3rd template character 

TYP Inserts two characters 

TYPE PROG.ASM Copies rest of template 


Notice that <SKIP1> does not affect the command line. It affects 
the template by deleting the first character. Similarly, 
<SKIPUP> deletes characters in the template, up to but not 
including a given character. 

These special editing keys can add to your effectiveness at the 
keyboard. The next section describes control character functions 
that can also help when you are typing commands. 


198 



MSX-DOS USER'S GUIDE 


3.1.13.2 Control Character Functions 


A control character 
command line. You 
<CONTROL-S>. Other 
below. 


function is a function that affects the 
have already learned about <CONTROL-C> and 
control character functions are described 


Remember that when you type a control character, such as 
<CONTROL-C>, you must hold down the control key and then press 
the "C" key. 


Table of Control Character Functions 


Control 

Character 


Function 


<CONTROL-N> 

CCONTROL-O 


Cancels echoing of output to line printer. 


Aborts current command. 


<CONTROL-H> 


<CONTROL-J> 


Removes last character from command line, 
and erases character from terminal screen. 


Inserts physical end-of-line, but does 
not empty command line. Use the <LINE 
FEED> key to extend the current logical 
line beyond the physical limits of one 
terminal screen. 


<CONTROL-P> 


Echoes terminal output to the line 
printer. 


<CONTROL-S> 


Suspends display of output to terminal 
screen. Press any key to resume. 


199 



















MSX-DOS USER'S GUIDE 


3.1.14 Instructions for Users with Single-drive Systems 

On a single-drive system, you enter the commands as you would on a 
multi-drive system. 

You should think of the single-drive system as having two drives 
(drive A and drive B). But instead of A and B representing two 
physical drives as on the multi-drive system, the A and B 
represent disks. 

If you specify drive B when the "drive A disk" was last used, you 
are prompted to insert the disk for drive B. For example: 

A> COPY COMMAND.COM B: 

Insert diskette for drive B: 
and strike a key when ready 
1 File(s) copied 
A>_ 

If you specify drive A when the "drive B disk" was last used, you 
are prompted again to change disks. This time, MSX-DOS prompts 
you to insert the "drive A disk." 

The same procedure is used if a command is executed from a batch 
file. MSX-DOS waits for you to insert the appropriate disk and 
to press any key before it continues. You will be prompted to do 
this. 


NOTE 

The letter displayed in the 
system prompt represents the 
default drive where MSX-DOS 
looks to find a file whose 
name is entered without a 
drive specifier. The letter in 
the system prompt does not 
represent the last disk used. 


For example, assume that A is the default drive. If the last 
operation performed was DIR B:, MSX-DOS believes the "drive B 
disk" is still in the drive. However, the system prompt is still 
A>, because A is still the default drive. If you type DIR, 
MSX-DOS prompts you for the "drive A disk" because drive A is 
the default drive, and you did not specify another drive in the 
DIR command. 


200 



MSX-DOS USER’ S GUIDE 


3.1.15 Disk Errors 

If a disk error occurs at any time during a command or program, 
MSX-DOS retries the operation three times. If the operation 
cannot be completed successfully, MSX-DOS returns an error message 
in the following format: 

<yyy> error <1/0 action> drive x 
Abort, Retry, Ignore? _ 

In this message,<yyy> may be one of the following: 

Write protect 
Not ready 
Disk 

The <I/0-action> may be either of the following: 

reading 

writing 

The drive <x> indicates the drive in which the error has occurred. 

MSX-DOS waits for you to enter one of the following responses: 

A Abort. Terminate the program requesting the disk 

read or write. 

I Ignore. Ignore the bad sector and pretend the 

error did not occur. 

R Retry. Repeat the operation. This response is 

to be used when the operator has corrected the 
error. 

Usually, you will want to attempt recovery by entering responses 
in this order: 

R (to try again) 

A (to terminate program and try a new disk) 

One other error message might be related to faulty disk read or 
write: 

Bad FAT 

This message means that the copy in memory of one of the 
allocation tables has pointers to nonexistent blocks. Possibly 
the disk was incorrectly formatted or not formatted before use. 
If this error persists, the disk is currently unusable and must be 
formatted prior to use. 


201 



MSX-DOS COMMAND GUIDE 


3.2 MSX-DOS Command Guide 


NOTE 

Users of single-drive systems 
should refer to 3.1.14 for 
the additional procedures 
required when executing many 
of the following commands. 


The following MSX-DOS commands are described here. Note that 
synonyms for commands are enclosed in parentheses. 


BASIC 

Goto MSX-BASIC 


COPY 

Copies file(s) specified 


DATE 

Displays and sets date 


DEL 

Deletes file(s) specified 

(ERASE) 

DIR 

Lists requested directory 

entries 

FORMAT 

Formats a disk to receive 

MSX-DOS file 

MODE 

Sets display screen mode 


PAUSE 

Pauses for input in a batch file 

REM 

Displays a comment in a batch file 

REN 

Renames first file as second file (RENAME) 

TIME 

Displays and sets time 


TYPE 

Displays the contents of : 

file specified 

VERIFY 

Sets/Resets verify mode 



202 



MSX-DOS COMMAND GUIDE 


BASIC 

SYNTAX: BASIC [<filespeO] 

PURPOSE: Boots MSX-BASIC 

COMMENTS: This command boots the MSX Disk BASIC from the 

MSX-DOS. 

If a BASIC program file is designated by the 
<filespec>, the program is automatically loaded 
and run after BASIC starts. 

This command changes the slot to make the BASIC 
ROM effective. So the memory map is different 
between the MSX-DOS and MSX-Disk-BASIC. 

Use "CALL SYSTEM" statement to return to the MSX-DOS 
from the BASIC. 


203 



MSX-DOS COMMAND GUIDE 


SYNTAX: 
PURPOSE: 

COMMENTS 


COPY 


COPY <filespec> [<filespec>] 

Copies one or more files to another disk. If you 
prefer, you can give the copies different names. 
This command can also copy files on the same disk. 

If the second filespec option is not given, the 
copy will be on the default drive and will have 
the same name as the original file (first filespec 
option). If the first filespec is on the default 
drive and the second filespec is not specified, 
the COPY will be aborted. (Copying files to 
themselves is not allowed.) MSX-DOS will return 
the error message: 

File cannot be copied onto itself 
0 files copied 

The second option may take three forms: 


1• If the second option is a drive designation 

(d:) only, the original file is copied with 
the original filename to the designated drive. 

2. If the second option is a filename only, the 
original file is copied to a file on the default 
drive with the filename specified. 

3. If the second option is a full filespec, the 

original file is copied to a file on the default 
drive with the filename specified. 


The COPY command also allows file concatenation 
(joining) while copying. Concatenation is 
accomplished by simply listing any number of files 
as options to COPY, separated by "+". 

For example, 

COPY A. XYZ + B. COM + B:C. TXT BIGFILE. CRP 

This command concatenates files named A.XYZ, B.COM, 
and B:C.TXT and places them in the file on the 
default drive called BIGFILE. CRP. 

To combine several files using wild cards into 
one file, you could type: 

COPY *.LST COMB IN.PRN 


204 



MSX-DOS COMMAND GUIDE 


This command would take all files with a filename 
extension of .LST and combine them into a file 
named COMBIN.PRN. 

In the following example, for each file found 
matching *.LST, that file is combined with the 
corresponding .REF file. The result is a file 
with the same filename but with the extension .PRN. 
Thus, FILE1.LST will be combined with FILE1.REF 
to form FILE1.PRN; then XYZ.LST with XYZ.REF to 
form XYZ.PRN; and so on. 

COPY *.LST + *.REF *.PRN 

The following COPY command combines all files 
matching *.LST, then all files matching *.REF, 
into one file named COMBIN.PRN: 

COPY *.LST + *.REF COMBIN.PRN 

Do not enter a concatenation COPY command where 

one of the source filenames has the same extension 

as the destination. For example, the following 

command is an error if ALL.LST already exists: 

COPY *.LST ALL.LST 

The error would not be detected, however, until 
ALL.LST is appended. At this point it could have 
already been destroyed. 

COPY compares the filename of the input file with 
the filename of the destination. If they are the 

same, that one input file is skipped, and the error 
message "Content of destination lost before copy" 
is printed. Further concatenation proceeds 

normally. This allows "summing" files, as in this 
example: 

COPY ALL.LST + *.LST 

This command appends all *.LST files, except ALL.LST 
itself, to ALL.LST. This command will not produce 
an error message and is the correct way to append 
files using the COPY command. 

Because ASCII files are usually concatenated, this 
command interprets a CTRL+Z (1AH) as a end of file 
mark in a file. So there is a need of a "/B" switch 
to use a physical end of file (length of file 
displayed by the DIR command), when binary files 
shall be concatenated. 

COPY/B A.COM+B.COM 


205 



MSX-DOS COMMAND GUIDE 


In this example, the B.COM is appended after the 
A.COM, and the destination file name is still A.COM. 

Any files can be concatenated by using "/B" switch 
for binary file and "/A" for ASCII file. A switch 
is effective for the switched file and the after 
until a other switch appears. 

Whether a CTRL+Z is appended at the end of the 
destination file or not is decided by a switch 
of the destination file. There is no CTRL+Z in 
the source file which is read in effect of ”/A". 
Only one CTRL+Z is written when a file is written 
in effect of "/A". Therefore more CTRL+Z are 
appended as follows. 

COPY A.ASM/B B. ASM/A 

In this example, "/B" avoids removing CTRL+Z and 
"/A" appends a CTRL+Z. 

When there is no concatenation, "/A" and "/B" 
switchs are valid, and the default file type is 
binary. "/A" switch terminates the copy at the 
first CTRL+Z. 


206 



MSX-DOS COMMAND GUIDE 


SYNTAX: 

PURPOSE: 


COMMENTS 


DATE 


DATE [<min>-<dd>-<yy>] 

Enter or change the date known to the system. This 
date will be recorded in the directory for any 
files you create or alter. 

You can change the date from your terminal or from 
® batch file. (MSX-DOS does not display a prompt 
for the date if you use an AUTOEXEC.BAT file, so 
you may want to include a DATE command in that 
f ile.) 

If you type DATE, DATE will respond with the 
message: 

Current date is <day>-<mm>-<dd>-<yy> 

Enter new date:_ 

Press <RETURN> if you do not want to change the 
date shown. 

You can also type a particular date after the DATE 
command, as in: 

DATE 3-9-81 

In this case, you do not have to answer the "Enter 
new date:" prompt. 

The new date must be entered using numerals only; 
letters are not permitted. The allowed options 
are: 


<mm> - 1-12 
<dd> «= 1-31 

<yy> = 0-79, 80-99 or 1980-2099 

The date, month, and year entries may be separated 
by hyphens (-), slashes (/) or periods (.). MSX-DOS 
is programmed to change months and years correctly, 
whether the month has 31, 30, 29, or 28 days. 
MSX-DOS handles leap years, too. 

<yy> is a two-digit number from 80-99 (the 19 is 
assumed), or a two-digit number from 00-79 (the 
20 is assumed), or a four-digit number from 
1980-2099 (representing year.) 

If the options or separators are not valid, DATE 
displays the message: 

Invalid date 
Enter new date:_ 


207 



MSX-DOS COMMAND GUIDE 


DATE then waits for you to enter a valid date. 


NOTE 

The date format (mm-dd-yy) may 
be changed depending on 
versions. For example, it is 
"yy-mm-dd" in Japanese version. 


208 



MSX-DOS COMMAND GUIDE 


DEL 

SYNONYM: 

SYNTAX: 
PURPOSE: 
COMMENTS: 


DELETE 

ERASE 

DEL [filespec] 

Deletes all files with the designated filespec. 

If the filespec is *.*, the prompt "Are you sure?" 
appears. If a "Y" or "y" or <RETURN> is typed 
as a response, then all files are deleted as 
requested. You can also type ERASE for the DELETE 
command. 


209 



MSX-DOS COMMAND GUIDE 


DIR 

SYNTAX: DIR [filespec] I/P][/W] 

PURPOSE: Lists the files in a directory. 

COMMENTS: If you just type dir, all directory entries on 

the default drive are listed. If only the drive 
specification is given (dir d:), all entries on 
the disk in the specified drive are listed. If 
only a filename is entered with no extension (DIR 
filename), then all files with the designated 

filename on the disk in the default drive are 
listed. If you designate a file specification 
(for example, DIR d:filename.ext), all files with 
the filename specified on the disk in the drive 

specified are listed. In all cases, files are 

listed with their size in bytes and with the time 
and date of their last modification. 

The wild card characters ? and * (question mark 

and asterisk) may be used in the filename option. 

Note that for your convenience the following DIR 
commands are equivalent: 


COMMAND 

EQUIVALENT 

DIR 

DIR 

*.* 

DIR FILENAME 

DIR 

FILENAME 

DIR .EXT 

DIR 

*. EXT 

DIR . 

DIR 

* 

• 


Two switches may be specified with DIR. The /P 
switch selects Page Mode. With /P, display of 
the directory pauses after the screen is filled. 
To resume display of output, press any key. 

The /W switch selects Wide Display. With /W, only 
filenames are displayed, without other file 
information. Files are displayed as much as 
possible per line. 


210 






MSX-DOS COMMAND GUIDE 


SYNTAX: 

PURPOSE: 

COMMENTS 


FORMAT 

FORMAT 

Formats the disk in the specified drive to accept 
MSX-DOS files. 

: This command initializes the directory and file 

allocation tables. A new disk must be formatted 
before use. If a used disk is formatted, all files 
in the disk are destroyed. 

MSX-DOS issues the following message: 

Drive name? (A,B) _ 

Select a drive name carefully. After you enter 
the drive name, the following message is displayed. 

Strike a key when ready_ 

After you insert the new disk in the drive and 
press any key on the keyboard. 

When the formatting finish , MSX-DOS will issue 
a following message. 

Format complete 


NOTE 

The format procedure may be 
different with this 

description. For example, you 
can choose disk format from 
single side or double side 
with some disk driver. See 
your disk driver's manual. 


211 



MSX-DOS COMMAND GUIDE 


MODE 

SYNTAX: MODE <width> 

PURPOSE: Sets the width of the display, 

COMMENTS: <width> is the maximum number of characters per 

line on display. 

<width> must be between 1 and 40. If it is 32 
or less, screen mode 1 is selected , else mode 
0 is selected. 

The default screen mode and width of international 
MSX versions are as follows. 


I I Default I Default I 

I Version I screen I screen I 

I I mode i width I 

i—--1-—-1—_____--—| 

I Japan I 1 l 29 I 

l- h- ■{ -H 

I USA I I 39 I 

— - — — — 

I UK I I 1 

I-H | I 

] DIN 101 I 

t--4 I 37 I 

I French I t I 

i- —i | i 

I INT I 1 I 


212 












MSX-DOS COMMAND GUIDE 


SYNTAX: 

PURPOSE: 

COMMENTS 


PAUSE 


PAUSE [comment] 

Suspends execution of the batch file. 

During the execution of a batch file, you may need 
to change disks or perform some other action. PAUSE 
suspends execution until you press any key, except 
<CONTROL-C>. 

When the command processor encounters PAUSE, it 
prints: 

Strike a key when ready . . . 

If you press <CONTROL-C>, another prompt will be 
displayed: 

Terminate batch file (Y/N) ? 

If you type "Y" in response to this prompt, 
execution of the remainder of the batch command 
file will be aborted and control will be returned 
to the operating system command level. Therefore, 
PAUSE can be used to break a batch file into pieces, 
allowing you to end the batch command file at an 
intermediate point. 

The comment is optional and may be entered on the 
same line as PAUSE. You may also want to prompt 
the user of the batch file with some meaningful 
message when the batch file pauses. For example, 
you may want to change disks in one of the drives. 
An optional prompt message may be given in such 
cases. The comment prompt will be displayed before 
the "Strike a key" message. 


213 



MSX-DOS COMMAND GUIDE 


REM 


SYNTAX: 
PURPOSE: 


COMMENTS: 


REM [comment] 

Displays remarks which are on the same line as 
the REM command in a batch file during execution 
of that batch file. 

The only separators allowed in the comment are 
the space, tab, and comma. 


214 



MSX-DOS COMMAND GUIDE 


REN 


SYNONYM: RENAME 


SYNTAX; 

PURPOSE; 

COMMENTS; 


REN <filespec> <filename> 

Changes the name of the first option (filespec) 
to the second option (filename). 

The first option (filespec) must be given a drive 
designation if the disk resides in a drive other 
than the default drive. Any drive designation 
for the second option (filename) is ignored. The 
file will remain on the disk where it currently 
resides. 


The wild card characters may be used 
option. All files matching the first 
are renamed. If wild card characters 
the second filename, corresponding 
positions will not be changed. 


in either 
filespec 
appear in 
character 


For example, the following command changes the 
names of all files with the .LST extension to 
similar names with the .PRN extension; 


REN *.LST *.PRN 


In the next example, REN renames the file ABODE 
on drive B to ADOBE; 

REN B;ABODE ?D?B? 

The file remains on drive B. 


An attempt to rename a filespec to a name already 
present in the directory will result in the error 
message "Rename error" 


215 



MSX-DOS COMMAND GUIDE 


SYNTAX: 

PURPOSE: 

COMMENTS 


TIME 


TIME [<hh>[:<mm>[:<ss>]1] 

Displays and sets the time. 

If the TIME command is entered without any arguments, 
the following message is displayed: 

Current time is <hh>:<mm>:<ss>.<cc> 

Enter new time:_ 

Press the <RETURN> key if you do not want to change 
the time shown. A new time may be given as an 
option to the TIME command as in: 

TIME 8:20 

The new time must be entered using numerals only; 
letters are not allowed. The allowed options are: 

<hh> = 00-24 
<mm> = 00-59 
< ss > = 00-59 

The hour and minute entries must be separated by 
colons. You do not have to type the <ss> (seconds) 
or <cc> (hundredths of seconds) options. 

MSX-DOS uses the time entered as the new time if 
the options and separators are valid. If the 
options or separators are not valid, MSX-DOS 
displays the message: 

Invalid time 
Enter new time:_ 

MSX-DOS then waits for you to type a valid time. 


NOTE 

If your computer does not have 
a clock, this command is 
nonsense. 


216 



MSX-DOS COMMAND GUIDE 


SYNTAX: 

PURPOSE: 

COMMENTS 


TYPE 


TYPE <filespec> 

Displays the contents of the file on the console 
screen. 

Use this command to examine a file without modifying 
it. (Use dir to find the name of a file.) The 
only formatting performed by TYPE is that tabs 
are expanded to spaces consistent with tab stops 
every eighth column. Note that a display of binary 
files causes control characters (such as CONTROL-Z) 
to be sent to your computer, including bells, form 
feeds, and escape sequences. 


217 



MSX-DOS COMMAND GUIDE 


VERIFY 

SYNTAX: VERIFY { ON ! OFF } 

PURPOSE: Set/reset verify (read after write) mode. 

COMMENTS: The VERIFY ON command sets verify mode. Whenever 

some data are written into disk, that data are read 
from disk and verified. If the verified data is not 
correct, "DISK I/O error" occurs. 

The VERIFY OFF command resets verify mode. 

Default mode is VERIFY OFF. 

Writing is more reliable but needs longer time in 
verify mode. 


218 



MSX DISK BASIC REFERENCE GUIDE 


3.3 MSX Disk BASIC Reference Guide 

Microsoft(TM) BASIC is the most extensive implementation of BASIC 
available for microprocessors. Microsoft BASIC meets the ANSI 
qualifications for BASIC, as set forth in document BSRX3.6 0-197 8. 
Each release of Microsoft BASIC is compatible with previous 
versions. 

MSX(TM) disk BASIC is a release of Microsoft BASIC for the MSX 
computer and its flexible disk system. 


3.3.1 Commands and Statements 


BLOAD 

BSAVE 

CLOSE 

COPY 

DSKO 

FIELD 

FILES and LFILES 

FORMAT 

GET 

INPUT# 

KILL 

LINE INPUT# 

LOAD 

LSET and RSET 

MAXFILES 

MERGE 

NAME 

OPEN 

PRINT# and PRINT# USING 

PUT 

RUN 

SAVE 

SYSTEM 

VERIFY 


219 



MSX DISK BASIC REFERENCE GUIDE 


BLOAD 


SYNTAX: 

PURPOSE: 

COMMENTS: 


EXAMPLE: 


BLOAD "<f ilespec>" { t , R] I [, S] } t , offset] 

Loads a machine language program or an array from 
disk or cassette tape into memory. 

The file name can be omitted only for the file in the 
cassette tape, not for the disk. 

If no <offset> is specified, the program is loaded 
from the address designated by the BSAVE command. If 
an <offset> is specified, the program is loaded 
from the address added <offset> to the saved address. 
Programs to be loaded with the offset must be 
relocatable. 

The R option automatically runs the program after it 
has been loaded. 

The S option loads the screen image saved by the 
"BSAVE ,S" statement to video RAM. 

If no drive name is specified, the program in the 
current drive is loaded. 

See also "BSAVE,". 

BLOAD "MAX2" 

Loads file "MAX2" into memory. 


220 



MSX DISK BASIC REFERENCE GUIDE 


BSAVE 


SYNTAX: 


PURPOSE: 
COMMENTS: 


BSAVE "<file spec>" f <start address>,<end address> 
U,<execute address>]I[,S]} 


Saves the machine language program 
memory on disk or cassette tape. 


currently 


in 


The program from <start address> to <end address> in 
memory is saved on disk or cassette tape. 

If no drive name is specified, the program is saved 
on the current drive. 


<start address> defines the default execution address. 

The S option saves the content of video RAM to the 
r lie. 


See also "BLOAD, ". 

EXAMPLE: BSAVE "TIMER", &HCOOO, &HCFFF 

Saves the program currently in memory from &HC000 
to &HCFFF on current drive under filename "TIMER". 


221 



HSX DISK BASIC REFERENCE GUIDE 


CLOSE 


SYNTAX: CLOSE [[#]<file number>[,[#]<file number...>]] 


PURPOSE: 
COMMENTS: 


EXAMPLE: 


Concludes I/O to a disk file. 

<file number> is the number under which the file was 
OPENed. A CLOSE with no arguments closes all open 
files. 

The association between a particular file and file 
number terminates upon execution of a CLOSE statement. 
The file may then be reOPENed using the same or a 
different file number; likewise/ that file number 
may now be reused to OPEN any file. 

A CLOSE for a sequential output file writes the final 
buffer of output. 

The END, CLEAR statements and the NEW command always 
CLOSE all disk files automatically. 

(STOP does not close disk files.) 

CLOSE #1 


222 



MSX DISK BASIC REFERENCE GUIDE 


COPY 

SYNTAX: 

PURPOSE: 

COMMENTS: 


COPY "<file spec>" TO "<file spec>" 

Copies one or more files to another disk. If you 

prefer, you can give the copies different names. 

This command can also copy files on the same disk. 

The second option may take three forms: 

1. If the second option is a drive designation 
(d:) only, the original file is copied with 
the original filename to the designated drive. 

2. If the second option is a filename only, the 
original file is copied to a file on the default 
drive with the filename specified. 

3. If the second option is a full filespec, the 
original file is copied to a file on the default 
drive with the filename specified. 


On a single-drive system, you enter the commands as 
you would on a multi-drive system. 

If you specify drive B when the "drive A disk" was 
last used, you are prompted to insert the disk for 
drive B. For example: 

COPY "A:TEST.ASC” TO "B:" 

After the file is loaded from "drive A disk" to 
memory, you are prompted as follows. 

Insert diskette for drive B: 
and strike a key when ready 

You remove "A disk" and insert "B disk". Then strike 
any key (except CONTROL-STOP). If the file is small, 
copy is completed. 

But, if the file is big, you must exchange two disks 
following the prompted instructions until copy is 
completed. Because parts of the file are loaded and 
saved one after another. 

If you specify drive A when the "drive B disk” was 
last used, you are prompted again to change disks. 
This time, BASIC prompts you to insert the "drive A 
disk". See also section 3.1.14. 


223 



MSX DISK BASIC REFERENCE GUIDE 


DSKO 


SYNTAX: 
COMMENTS: 


NOTE: 


DSKO <drive_number>,<1 ogical_sector__number> 

Writes to the specified sector from memory pointed 
to by the content of (0F351H,0F352H) . 

<drive_number> is 0 for default drive, 1 for drive A, 
2 for drive B, and so on. 

<logical_sector_number> is a 0 based number. No check 
for the valid sector number is made. 

This memory area is destroyed when any disk 
statements (ex. FILES, OPEN, CLOSE, PRINT#, etc.) are 
executed. 


224 



MSX DISK BASIC REFERENCE GUIDE 


FIELD 


SYNTAX: 


PURPOSE: 

COMMENTS: 


NOTE: 


EXAMPLE 1: 


FIELD [#]<file number>,<field width> 

AS <string variable>... 

Allocates space for variables in a random file 
buffer. 

Before a GET statement or PUT statement can be 
executed, a FIELD statement must be executed to 
format the random file buffer. 

<file number> is the number under which the file was 
OPENed. <field width> is the number of characters 
to be allocated to <string variable>. 

For example, 

FIELD 1,20 AS N$,10 AS IDS,40 AS ADDS 

allocates the first 20 positions (bytes) in the 
random file buffer to the string variable N$, the 
next 10 positions to IDS, and the next 40 positions 
to ADDS. FIELD does NOT place any data in the 
random file buffer. (See "LSET/RSET,", and "GET,".) 

The total number of bytes allocated in a FIELD 
statement must not exceed the record length that was 
specified when the file was OPENed. Otherwise, a 
"Field overflow" error occurs. 

(The default record length is 256 bytes.) 

Any number of FIELD statements may be executed for 
the same file. All FIELD statements that have been 
executed will remain in effect at the same time. 

Do not use a FIELDed variable name in an INPUT or 
LET statement. Once a variable name is FIELDed, 
it points to the correct place in the random file 
buffer. If a subsequent INPUT or LET statement with 
that variable name is executed, the variable’s 
pointer is moved to string space. 

10 OPEN "ArPHONELST" AS #1 LEN=35 
15 FIELD #1,2 AS RECNBR$,33 AS DUMMY$ 

20 FIELD #1,25 AS NAMES,10 AS PHONENBRS 
25 GET #1 

30 TOTAL=CVI (RECNBR) $ 

35 FOR 1=2 TO TOTAL 
40 GET #1, I 

45 PRINT NAMES, PHONENBR5 
50 NEXT I 


Illustrates a multiple defined FIELD statement. In 
statement 15, the 35 byte field is defined for the 
first record to keep track of the number of records 


225 



MSX DISK BASIC REFERENCE GUIDE 


EXAMPLE 2: 


EXAMPLE 3: 


in the file. In the next loop of statements (35-50), 
statement 20 defines the field for individual names 
and phone numbers. 

10 FOR LOOP%=0 TO 7 

20 FIELD #1,(LOOP%*16) AS OFFSETS,16 AS A$(LOOP%) 

30 NEXT LOOP% 

Shows the construction of a FIELD statement using 
an array of elements of equal size. The result is 
equivalent to the single declaration: 

FIELD #1,16 AS A?(0),16 AS A$(l),...,16 AS A$(6) 

,16 AS A$(7) 

10 DIM SIZ E% (NUMB%>: REM ARRAY OF FIELD SIZES 
20 FOR LOOP%=0 TO NUMB%:READ SIZE%(LOOP%): NEXT LOOP% 
30 DATA 9,10,12,21,41 


• 

120 DIM A$(NUMB%): REM ARRAY OF FIELDED VARIABLES 

130 OFFSET%=0 

140 FOR LOOP%=0 TO NUMB% 

150 FIELD #l,OFFSET% AS OFFSETS,SIZE%(LOOP%) 

AS A$(LOOP%) 

16 0 OFFSET%=OFFSET%+SIZ E%(LOOP%) 

170 NEXT LOOP% 

Creates a field in the same manner as Example 2. 
However, the element size varies with each element. 
The equivalent declaration is: 

FIELD #1,SIZE%(0) AS A$(0) ,SIZE%(1) AS A$(l),... 

SIZ E%(NUMB%) AS A$(NUMB%) 


226 



MSX DISK BASIC REFERENCE GUIDE 


SYNTAX: 

PURPOSE: 

COMMENTS 


EXAMPLE: 


FILES and LFILES 

FILES I"<file spec>"] 

LFILES [”<fiie spec>"] 

Displays or prints file names of disk files. 

: The file names designated by the <file spec> are 

displayed. If the designated file does not exists. 
File not found" error is occurs. 

If no <file spec> is specified, all file names in the 
current drive are displayed. 

There can be question mark (?) in the file name to 
substitute for a character in the file name or 
extension. And, there can be asterisk (*) to 
substitute for any file name or extension. 

If the drive name is designated, the file names in 
that drive is displayed, else in current drive. 

The LFILES command outputs file names not to display 
but to printer. 

FILES "B:BAS" 


227 



MSX DISK BASIC REFERENCE GUIDE 


FORMAT 

SYNTAX: 

PURPOSE: 
COMMENTS: 


NOTE: 


CALL FORMAT 
or 

_FORMAT 

Initializes a disk. 

Menu is displayed as follows. 

Drive name? (A,B) _ 

Select a drive name carefully. After you enter 
the drive name, the following message is 
displayed. 


Strike a key when ready_ 

After you insert the new disk in the drive and 
press any key on the keyboard. 

When the formatting is finished, BASIC will issue 
the following message. 

Format complete 


If a used disk is formatted, all files in that 
disk is destroyed. 

New disks must be formatted before use. 

The format procedure may be different with this 
description. For example, you can choose disk 
format from single side or double side with some 
disk driver. See your disk driver's manual. 


228 



MSX DISK BASIC REFERENCE GUIDE 


GET 


SYNTAX: 

PURPOSE: 

COMMENTS: 


EXAMPLE: 


NOTE: 


GET [#]<file number>[,<record number>] 

Reads a record from a random disk file into a random 
buffer. 

<file number> is the number under which the file was 
OPENed. If <record number> is omitted, the next 
record (after the last GET) is read into the buffer. 
The largest possible record number is 4,294,967,295. 

10 OPEN "SAMPLE.DAT" AS #1 
20 FIELD #1, 2 AS A$, 10 AS B$ 

30 FOR I%=1 TO 10 
40 GET #1, 1% 

50 PRINT CVI (A$) ; B$ 

60 NEXT 
7 0 CLOSE #1 
80 END 

After an execution of a GET statement, INPUT# and 
LINE INPUT# may be executed to read characters from 
the random file buffer. 


229 



MSX DISK BASIC REFERENCE GUIDE 


SYNTAX: 

PURPOSE: 

COMMENTS 


EXAMPLE: 


INPUT# 

INPUT#<file number>,<variable list> 

Reads data items from a sequential disk file and 
assigns them to program variables. 

: <file number> is the number used when the file was 

OPENed for input. <variable list> contains the 
variable names that will be assigned to the items in 
the file. (The variable type must match the type 
specified by the variable name.) 

With INPUT#, no question mark is printed, as with 
INPUT. 

The data items in the file should appear just as they 
would if data were being typed in response to an 
INPUT statement. With numeric values, leading 
spaces, carriage returns, and line feeds are ignored. 
The first character encountered that is not a space, 
carriage return, or line feed is assumed to be the 
start of a number. The number terminates on a space, 
carriage return, line feed, or comma. 

If MSX BASIC is scanning the sequential data file for 
a string item, leading spaces, carriage returns, and 
line feeds are also ignored. The first character 
encountered that is not a space, carriage return, or 
line feed is assumed to be the start of a string 
If this first character is a quotation mark 
( ), the string item will consist of all characters 
read between the first quotation mark and the second. 
Thus, a quoted string may not contain a quotation 
mark as a character. If the first character of the 
string is not a quotation mark, the string is an 
unquoted string, and will terminate on a comma, 
a carriage return, or a line feed (or after 255 
characters have been read). If end-of-file is reached 
when a numeric or string item is being INPUT, the 
item is terminated. 

10 OPEN "SAMPLE2.DAT" FOR INPUT AS #1 
20 INPUT #1, A$ 

30 PRINT A$ 

40 IF EOF(l)=0 THEN 20 
50 CLOSE #1 
6 0 END 


230 



MSX DISK BASIC REFERENCE GUIDE 


KILL 

SYNTAX: 
PURPOSE: 
COMMENTS: 

EXAMPLE: 


KILL "<file spec>" 

Deletes a file from disk. 

If a KILL statement is given for a file that is 
currently OPEN, a "File already open" error occurs. 

KILL is used for all types of disk files: program 
files, random data files, and sequential data files. 

200 KILL "DATA1.DAT" 


231 



MSX DISK BASIC REFERENCE GUIDE 


SYNTAX: 
PURPOSE: 

COMMENTS 


EXAMPLE: 


LINE INPUT# 

LINE lNPUT#<file number>,<string variable> 

Reads an entire line (up to 254 characters), without 
delimiters, from a sequential disk data file to a 
string variable. 

: <file number> is the number under which the file was 

OPENed. <string variable> is the variable name to 
which the line will be assigned. LINE INPUT# reads 
all characters in the sequential file up to a 
carriage return. It then skips over the carriage 
return/line feed sequence. The next LINE INPUT# reads 
all characters up to the next carriage return. 
(If a line feed/carriage return sequence is 
encountered, it is understood as a string ending with 
a line feed character.) 

LINE INPUT# is especially useful if each line of a 
data file has been broken into fields, or if an 
MSX BASIC program saved in ASCII format is being read 
as data by another program. (See "SAVE,".) 

10 OPEN "LIST" FOR OUTPUT AS #1 

20 LINE INPUT "CUSTOMER INFORMATION? ";C$ 

30 PRINT #1, C? 

40 CLOSE 1 

50 OPEN "LIST" FOR INPUT AS #1 
60 LINE INPUT #1, C$ 

70 PRINT C$ 

80 CLOSE 1 
RUN 

CUSTOMER INFORMATION? LINDA JONES 234,4 MEMPHIS 
LINDA JONES 23 4,4 MEMPHIS 
Ok 


232 



MSX DISK BASIC REFERENCE GUIDE 


LOAD 


SYNTAX: 
PURPOSE: 
COMMENTS: 


EXAMPLE: 


LOAD <f ilename>[ ,R] 

Loads a file from disk into memory. 

<filename> is the name that was used when the file 
was SAVEd. 

The R option automatically runs the program after 
it has been loaded. 

LOAD closes all open files and deletes all variables 
and program lines currently residing in memory before 
it loads the designated program. However, if the R 
option is used with LOAD, the program is RUN after it 
is LOADed, and all open data files are kept open. 
Thus, LOAD with the R option may be used to chain 
several programs (or segments of the same program). 
Information may be passed between the programs using 
their disk data files. 

Until the designated file is found and started 
being loaded, the program in memory is kept. 

LOAD "STRTRK",R 

LOAD ”B:MYPROG” 


233 



MSX DISK BASIC REFERENCE GUIDE 


LSET and RSET 


SYNTAX: 


PURPOSE: 

COMMENTS: 


EXAMPLE: 


NOTE: 


LSET <string vaciable>=<string expression> 

RSET <string variable>=<string expression> 

Moves data from memory to a random file buffer 
(in preparation for a PUT statement). 

If <string expression> requires fewer bytes than were 
FlELDed to <string variable>, LSET left-justifies 
the string in the field, and RSET right-justifies the 
string. (Spaces are used to pad the extra positions.) 
If the string is too long for the field, characters 
are dropped from the right. Numeric values must be 
converted to strings before they are LSET or RSET. 
(See "MKI$, MKS$, MKD$,",) 

150 LSET A$=MKS$(AMT) 

160 LSET D$=DESC($) 

LSET or RSET may also be used with a nonfielded 
string variable to left-justify or right-justify a 
string in a given field. For example, the program 
lines 

110 A$ = SPACE $ (20) 

120 RSET A$=N$ 

right-justify the string N$ in a 20-character field. 
This can be very handy for formatting printed output. 


234 



MSX DISK BASIC REFERENCE GUIDE 


SYNTAX: 

PURPOSE: 

COMMENTS 


MAXFILES 

MAXFILES=<expression> 

Specifies the maximum number of files opened at a 
time. 

: <expression> can be in the range of 0 to 15. When 

'MAXFILES=0' is executed, only SAVE and LOAD can be 
performed. 


235 



MSX DISK BASIC REFERENCE GUIDE 


SYNTAX: 

PURPOSE: 

COMMENTS 


EXAMPLE: 


MERGE 

MERGE <filename> 

Merges a specified disk file into the program 
currently in memory. 

<filename> is the name used when the file was SAVEd. 
The file must have been SAVEd in ASCII format. (If 
not, a "Bad file mode" error occurs.) 

If any lines in the disk file have the same line 
numbers as lines in the program in memory, the lines 
from the file on disk will replace the corresponding 
lines in memory. (MERGEing may be thought of as 
"inserting" the program lines on disk into the 
program in memory.) 

MSX BASIC always returns to command level after 
executing a MERGE command. 

MERGE "NUMBRS" 


236 



MSX DISK BASIC REFERENCE GUIDE 


NAME 


SYNTAX: 
PURPOSE: 
COMMENTS: 


EXAMPLE: 


NAME <old filespec> AS <new filename> 

Changes the name of a disk file. 

Cold filespec> must exist and Cnew filename> must 
not exist; otherwise, an error will result. After 
a NAME command, the file exists on the same disk, in 
the same area of disk space, with the new name. 

If no drive name is specified, the current drive is 
selected. 

NAME "ACCTS" AS "LEDGER" 

In this example, the file that was formerly named 
ACCTS will now be named LEDGER. 


237 



MSX DISK BASIC REFERENCE GUIDE 


OPEN 

SYNTAX: 

PURPOSE: 

COMMENTS: 


NOTE: 

EXAMPLE: 


OPEN "<filespec>" [FOR<mode>] AS I#] <file number> 
[LEN=<reclen>] 


Allows I/O to a disk file. 

A disk file must be OPENed before any disk I/O 
operation can be performed on that file. OPEN 
allocates a buffer for I/O to the file and determines 
the mode of access that will be used with the buffer. 


<mode> is one of the following: 


FOR OUTPUT Specifies sequential output mode. 


FOR INPUT Specifies sequential input mode. 

FOR APPEND Specifies sequential append mode after 
end of an existent file. 


default Specifies random input/output mode. 

<file number> is an integer expression whose value is 
between one and the maximum number of files specified 
in a MAXFILES statement.The number is then associated 
with the file as long as it is OPEN and is used to 
refer to other disk I/O statements to the file. 


<filename> is a string expression containing a name 
that conforms to your operating system's rules for 
disk filenames. 

<reclen> is an integer expression which, if included, 
sets the record length for random files. The default 
record length is 256 bytes. The largest possible 
record length is 256. The smallest is 1. 

If sequential input or append mode is used for non¬ 
existent file, "File not found" error occurs. If 
sequential output mode is used for existent file, 
the old file is deleted. 


A file can be OPENed for sequential input or random 
access on more than one file number at a time. A file 
may be OPENed for output, however, on only one file 
number at a time. 


10 OPEN "INVEN” FOR INPUT AS #1 


238 



MSX DISK BASIC REFERENCE GUIDE 


PRINT# and PRINT# USING 

SYNTAX: PRINT#<file number>,[USING <string exp>;] 

<list of expressions> 

PURPOSE: Writes data to a sequential disk file. 

COMMENTS: <file number> is the number used when the file was 

OPENed for output. <string exp> consists of 
formatting characters as described in "PRINT USING." 
The expressions in <list of expressions> are the 
numeric and/or string expressions that will be 

written to the file. 

PRINT# does not compress data on the disk. An image 

of the data is written to the disk/ just as it would 
be displayed on the terminal screen with a PRINT 

statement. For this reason, care should be taken to 
delimit the data on the disk, so that it will be 
input correctly from the disk. 

In the list of expressions, numeric expressions 
should be delimited by semicolons. For example: 

PRINTll,A;B;C;X;Y;Z 

(If commas are used as delimiters, the extra blanks 
that are inserted between print fields will also be 
written to the disk.) 

String expressions must be separated by semicolons 
in the list. To format the string expressions 
correctly on the disk, use explicit delimiters in the 
list of expressions. 

For example, let A$="CAMERA" and B$="93604-1". 

The statement 

PRINT#1,A$;B$ 

would write CAMERA93604-1 to the disk. Because there 
are no delimiters, this could not be input as two 
separate strings. To correct the problem, insert 
explicit delimiters into the PRINT# statement as 
follows: 

PRINT#1,A$j",";B? 

The image written to disk is 
CAMERA, 93 6 04-1 

which can be read back into two string variables. 


239 



MSX DISK BASIC REFERENCE GUIDE 


If the strings themselves contain commas, semicolons, 
significant leading blanks, carriage returns, or line 
feeds, write them to disk surrounded by explicit 
quotation marks, CHR$(34). 

For example, let A$="CAMERA, AUTOMATIC" and 
B $=" 93604-1". The statement 

PRINT#1,A$;B $ 

would write the following image to disk: 

CAMERA, AUTOMATIC 93604-1 
And the statement 
INPUT#1,A$,B$ 

would input "CAMERA" to A$ and "AUTOMATIC 93604-1" 
to B$. To separate these strings properly on the 
disk, write double quotation marks to the disk image 
using CHR$(34). The statement 

PRINT#1,CHR$(34);A$;CHR$(34);CHRS(34);B$;CHR$<34) 
writes the following image to disk: 

"CAMERA, AUTOMATIC"" 93604-1" 

And the statement 
INPUT#1,A$,B$ 

would input "CAMERA, AUTOMATIC" to A$ and 
" 93604-1" to B$. 

The PRINT# statement may also be used with the USING 
option to control the format of the disk file. For 
example: 

PRINT#1,USING”¥¥###.##,";J;KjL 

(Japanase. Refer to 5.4 for other versions.) 


240 



MSX DISK BASIC REFERENCE GUIDE 


PUT 


SYNTAX: 

PURPOSE: 

COMMENTS: 


EXAMPLE: 


NOTE: 


PUT [*] <f ile number>[,<record number>] 

Writes a record from a random buffer to a random disk 
file. 

<file number> is the number under which the file 
was OPENed. if Crecord number> is omitted, the 
record will assume the next available record number 
(after the last PUT)♦ The largest possible record 
number is 4,294,967,295. The smallest record number 
is 1. 

10 OPEN "SAMPLE.DAT" AS #1 
20 FIELD #1, 2 AS A$, 10 AS B$ 

30 FOR I%=1 TO 10 
40 INPUT N%, S$ 

50 LSET A$=MKI${N%) 

60 LSET B$=S$ 

7 0 PUT #1, 1% 

80 NEXT 
90 CLOSE #1 
100 END 


LSET or RSET statement must be used to put characters 
in the random file buffer before executinq a PUT 
statement. 

Any attempt to read or write past the end of the 
buffer causes a "Field overflow" error. 


241 



MSX DISK BASIC REFERENCE GUIDE 


RUN 


SYNTAX: 
PURPOSE: 
COMMENTS: 


EXAMPLE: 


RUN <filename>[,R] 

Loads a file from disk into memory and runs it. 

<filename> is the name used when the file was SAVEd. 

RUN closes all open files and deletes the current 
contents of memory before loading the designated 
program. However, with the "R" option, all data 
files remain OPEN. 

RUN "NEWFIL", R 


242 



MSX DISK BASIC REFERENCE GUIDE 


SAVE 


SYNTAX: 
PURPOSE: 
COMMENTS: 


NOTE: 


EXAMPLE: 


SAVE <filespec>[,A] 

Saves a program file on disk. 

<filespec> is a quoted string that conforms to 
MSX-DOS's requirements for filenames. If <filespec> 
already exists, the file will be written over. 

Use the A option to save the file in ASCII format. 
Otherwise, MSX BASIC saves the file in a compressed 
binary format. ASCII format takes more space on the 
disk, but some disk access requires that files be in 
ASCII format. For instance, the MERGE command 
requires an ASCII format file, and some operating 
system commands such as LIST may require an ASCII 
format file. 

"CSAVE" and "SAVE" are used for binary and ASCII 
save of cassete tape file. But "SAVE" and 
SAVE ... ,a" are used for that cases of disk file. 

SAVE "COM2", A 


243 



MSX DISK BASIC REFERENCE GUIDE 


SYSTEM 

SYNTAX: CALL SYSTEM 

or 

_SYSTEM 

PURPOSE: Exits from disk BASIC and returns to MSX-DOS. 

COMMENTS: This command is valid only when BASIC has been 

booted from MSX-DOS. 

By this command all files are closed and the program 
and the data in memory are destroyed. 


244 



MSX DISK BASIC REFERENCE GUIDE 


VERIFY 


SYNTAX: 


PURPOSE: 
COMMENTS: 


NOTE: 


CALL VERIFY { ON I OFF } 
or 

_VERIFY { ON I OFF } 

Sets/resets verify (read after write) mode. 

The VERIFY ON command sets verify mode. Whenever 
some data are written into disk, that data are read 
from disk and verified. If the verified data is not 
correct, "DISK I/O error" occurs. 

The VERIFY OFF command resets verify mode. 

Default mode is VERIFY OFF. 

Writing is more reliable but needs longer time in 
verify mode. 


245 



MSX DISK BASIC REFERENCE GUIDE 


3.3.2 Functions 

CVI, CVS/ CVD 

DSKF 

DSKI ? 

EOF 

INPUT? 

LOC 

LOF 

MKI$,MKS $/MKD $ 
VARPTR 


246 



MSX DISK BASIC REFERENCE GUIDE 


SYNTAX: 

PURPOSE: 


EXAMPLE: 


SYNTAX: 

PURPOSE 


EXAMPLE 


CVI, CVS, CVD 

CVI(<2-byte string>) 

CVS(<4-byte string>) 

CVD(<8-byte string>) 

To convert string values to numeric values. Numeric 
values that are read in from a random disk file must 
be converted from strings back into numbers. CVI 
converts a 2-byte string to an integer. CVS converts 
a 4-byte string to a single precision number. CVD 
converts an 8-byte string to a double-precision 
number. 


70 FIELD #1,4 AS NS, 12 AS B$, ... 
80 GET #1 
90 Y=CVS(N$) 


See also "MKIS, MKS$, MKD$, ". 


DSKF 


DSKF(<drive number>) 

To know free area size of specified disk by K byte. 

The drive number corresponds to the drive name as 
follows. 

0 default drive 

1 drive A: 

2 drive B: 
and so on 

PRINT DSKF(l) 


247 



MSX DISK BASIC REFERENCE GUIDE 


DSKI5 

SYNTAX: 

PURPOSE: 


NOTE: 


EOF 

SYNTAX: 

PURPOSE: 


EXAMPL E: 


DSKI $ (<drive_number >,<logical_sector_number >) 

To read the specified sector to memory pointed to 
by the content of (0F351H,0F352E) . 

<drive_number> is 0 for default drive, 1 for drive A, 
2 for drive B, and so on. 

<logical_sector_number> is a 0 based number. No check 
for the valid sector number is made. 

This memory area is destroyed when any disk 
statements (ex. FILES, OPEN, CLOSE, PRINT#, etc.) 
are executed. 


EOFKfile number>) 

To know if the end of a sequential file has been 
reached. Returns -1 (true) if so. Use EOF to test 
for end-of-file while INPUTting, to avoid "Input past 
end" errors. 

The file specified by the file number must be opened 
as sequential input mode. 

10 OPEN "DATA" FOR INPUT AS #1 
20 C=0 

30 IF EOF (1) THEN 100 
40 INPUT #1, M (C) 

50 C=C+1 :GOTO 30 


248 



MSX DISK BASIC REFERENCE GUIDE 


SYNTAX: 

PURPOSE: 


EXAMPLE: 


SYNTAX: 

PURPOSE 


EXAMPLE 


INPUT? 

INPUT?(X[, [#]Y] ) 

To read data from the terminal or from file number Y. 
Returns a string of X characters, If the terminal 
is used for input, no characters will be echoed. All 
control characters are passed through except Control- 
STOP, which is used to interrupt the execution of 
the INPUT? function. 

5 'LIST THE CONTENTS OF A SEQUENTIAL FILE IN 
HEXADECIMAL 

10 OPEN "DATA" FOR INPUT AS #1 

20 IF EOF(1) THEN 50 

30 PRINT HEX? (ASC (INPUT$(1,#1) ) ) ; 

40 GOTO 20 
50 PRINT 
60 END 


LOC 


LOC(<file number>) 

where <file number> is the number under which the 
file was OPENed. 

With random disk files, LOC returns the record number 
just read or written from a GET or PUT statement. 
If the file was opened but no disk I/O has been 
performed yet, LOC returns a 0. With sequential 
files, LOC returns the number of records read from 
or written to the file since it was OPENed. When no 
record is read from the sequential input file since 
it was opened, LOC returns 1, because SYSTEM has read 
the first sector. 

200 IF LOC(1)>50 THEN STOP 


249 



MSX DISK BASIC REFERENCE GUIDE 


LOF 

SYNTAX: 

PURPOSE: 

EXAMPLE: 


MKI $ , 
SYNTAX: 

PURPOSE: 


EXAMPLE: 


LOF(<file number>) 

LOF returns the size of the specified file by byte. 
IF NUM%>LOF (1) THEN PRINT "INVALID" 


MKS $ , MKD$ 

MKI $ Kinteger expression>) 

MKS$(<single precision expressions 
MKD$(<double precision expression>) 

To convert numeric values to string values. Any 
numeric value that is placed in a random file buffer 
with an LSET or RSET statement must be converted to a 
string. MKI$ converts an integer to a 2-byte string. 
MKS $ converts a single precision number to a 4-byte 
string. MKD$ converts a double precision number to 
an 8-byte string. 

90 AMT=(K+T) 

100 FIELD #1,8 AS D$,20 AS N$ 

110 LSET D5=MKS$(AMT) 

120 LSET N$=A$ 

130 PUT #1 


See also "CVI, CVS, CVD,". 


250 



HSX DISK BASIC REFERENCE GUIDE 


SYNTAX: 

PURPOSE 

EXAMPLE 


VARPTR 

VARPTR(#<f ile number >) 

VARPTR returns the address of the file control block 
assigned to <file number>. 

100 X=USR(VARPTR(#1)) 


251 



MSX DISK BASIC REFERENCE GUIDE 


3.3.3 Error Codes and Error Messages 
Code Number Disk Errors Message 

50 Field overflow 

A FIELD statement is attempting to allocate 
more bytes than were specified for the record 
length of a random file. 

51 Internal error 

An internal malfunction has occurred in 
MSX BASIC. Report to Microsoft the 
conditions under which the message appeared. 

52 Bad file number 

A statement or command references a file with 
a file number that is not OPEN or is out of 
the range of file numbers specified at 
initial ization. 

53 File not found 

A LOAD, KILL, or OPEN statement references a 
file that does not exist on the current disk. 

54 File already open 

A sequential output mode OPEN statement is 
issued for a file that is already open; or a 
KILL statement is given for a file that is 
open. 

55 Input past end 

An INPUT statement is executed after all the 
data in the file has been INPUT, or for a 
null (empty) file. To avoid this error, use 
the EOF function to detect the end-of-file. 

56 Bad file name 

An illegal form is used for the filename with 

a LOAD, SAVE, KILL, or OPEN statement (e.g., 
a filename with too many characters). 

57 Direct statement in file 

A direct statement is encountered while 
LOADing an ASCII-format file. The LOAD is 
terminated. 


252 



MSX DISK BASIC REFERENCE GUIDE 


5 8 Sequential I/O only 

A GET or PUT statement is used on a sequential 
file. 

59 File not open 

An input or output statement is executed on a 
not opened file. 

60 Bad allocation table 

The disk is not initialized. 

61 Bad file mode 

An attempt is made to use PUT, GET, or LOF 
with a sequential file, to LOAD a random 
file, or to execute an OPEN statement with a 
file mode other than "FOR INPUT", "FOR OUTPUT" 
, "FOR APPEND" or default (random). 

62 Bad drive name 

A invalid drive name is specified. 

64 File still open 

The file is not closed. 

65 File already exists 

The filename specified in a NAME statement is 
identical to a filename already in use on the 
disk. 

66 Disk full 

All disk storage space is in use. 

67 Too many files 

An attempt is made to create a new file 
(using SAVE or OPEN) when all 255 directory 
entries are full. 

68 Disk write protected 

A PUT or PRINT# statement is executed on 
a write protected disk. 

69 Disk I/O error 

An I/O error occurred on a disk I/O 


253 



MSX DISK BASIC REFERENCE GUIDE 


operation. It is a fatal error; i.e., the 
operating system cannot recover from the 
error. 

70 Disk offline 

There is no disk in the specified drive. 

71 Rename across disk 

A RENAME statement is executed, across one 
drive to another. 


254 



MSX-DOS BOOT PROCEDURE 


3.4 MSX-DOS Boot Procedure 

1) Boot Procedure 

When all the buffers for the disk system are successfully 
allocated, the disk ROM checks the contents of address OFEDAH 
to see if a ROM cartridge has set the hook (H.STKE) to gain 
control of the disk system. If the contents is not a 'RET' 
instruction (0C9H), the disk ROM sets up environments for disk 
BASIC and jumps to this hook. 

The disk ROM next checks if there is an existing cartridge 
which has a TEXT entry in the cartridge header. If such a 
cartridge is found, the disk ROM sets up environments for disk 
BASIC and executes the BASIC program from the cartridge. 

Next, the first sector of a first track (logical sector number 
0) is read and transferred to 0C000H to OCOFFH. If this read 
routine fails because of a drive not ready, a read error, or 
if the first byte of the boot sector is not 0EBH nor 0E9H, 
disk BASIC starts up. 

Next, address 0C01EH is called with the carry flag set. This 
routine is provided so as to make game or other application 
programs take control of the disk system. The standard boot 
sector (provided) will just execute a 'RET' instruction if the 
carry flag is reset. 

The ROM program next does a non-destructive memory check. If 
a 64K~byte RAM is not available, the program transfers control 
to disk BASIC. 

Next the environments for MSXDOS are set up, and the routine 
jumps to 0C01EH with the carry flag set. Our standard boot 
sector loads MSXDOS.SYS at 100H and jumps to it. If MSXDOS.SYS 
not present, disk BASIC is invoked. 

MSXDOS. SYS loads COMMAND.COM at 100H and jumps to it. If 
COMMAND.COM is not present, the routine prompts the user to 
insert a diskette with COMMAND.COM in it. 

2) AUTOEXEC.BAT 

When MSXDOS is first booted, it searches for a file named 
AUTOEXEC.BAT and executes it as a batch file. 

3) AUTOEXEC. BAS 

When MSX disk BASIC is first invoked, it looks for a file 
named AUTOEXEC.BAS and executes it as a BASIC program. 


255 



MSX—DOS AND DISK BASIC DISK DRIVER 


3.5 MSX-DOS and MSX Disk BASIC Disk Driver 


The following values must be defined and declared as PUBLIC by 
the person or organization doing the interfacing. 


MYSIZ E 

Byte size of the work area used by the driver. 

SECLEN 

The maximum sector size for the media supported by the 
driver. 


DEFDPB 

The base address of the DPB (which consists of 18 bytes) 
for the media having the largest value for FATSIZ*SECSIZ. 


The following subroutines must be provided and declared as PUBLIC 
by the person or organization doing the interfacing. 


INIHRD 

DRIVES 

INIENV 

DSKIO 

DSKCHG 

GETDPB 

CHOICE 

DSKFMT 

OEMSTATEMENT 


Initialize hardware 

Return number of drives in system 

Initialize work area 

Read/Write to disk 

Get disk change status 

Get drive parameter block 

Return character string for disk formatting 
Format disk 

(Entry point for use in system expansion) 


The following 


is a detailed description the above routines. 


INIHRD 


Inputs: 

None 


Outputs: 

None 

Registers: 

AF, BC, DE, HL, IX, IY may be affected. 

This routine initializes the hardware as soon as the 
control passes to the cartridge. Note that no work area 
is assigned when this routine is initiated. 


256 



MSX-DOS AND DISK BASIC DISK DRIVER 


DRIVES 


Inputs: 

IF! = 

The zero 

' flag 

is reset 

in case one 


physical 

drives. 

drive 

must act 

as two logical 

Outputs: 

[L] = 

Registers: 

Number of 

drives 

connected 


F, HL, 

IX, IY may 

be affected. 



Before any other processing can be done, the number of 
drives connected to the cartridge must be counted. 
If more than one drive is detected, or if the zero flag 
passed from the calling routine is set, the number of 
drives is returned (unmodified). 

If only one drive has been detected and the zero flag 
passed is reset, a '2' must be returned as the number of 
drives, and the DSKIO and DSKFMT routines must logically 
support two drives. Use the PROMPT routine (described 
below) when switching drives. 

When this routine is entered, the work area for the driver 
is already allocated. 


INIENV 

Inputs: 

None 


Outputs: 

None 

Registers: 

AF, BC, DE, HL, IX, IY may be affected. 

This entry initializes the work area (environment). 


INIHRD, DRIVES and INIENV are called only 
once during initialization, in the above 
order. 


257 



MSX-DOS AND DISK BASIC DISK DRIVER 


DSKIO 

Inputs: 

[P] = Carry flag reset for read, 

set for write 
[Al = Drive number (starts at 0) 

[B] = Number of sectors to read/write 

tCI = Media descriptor 

[DE] = Logical sector number (starts at 0) 

EHL] = Transfer address 

Outputs: 

If successful, carry flag cleared. 

Otherwise, carry flag set, 

error code is placed in [Al, 
number of remaining sectors 
in CB] . 

Registers: 

AF, BC, DE, HL, IX, IY may be affected. 

The drive number and media descriptor come from the drive 
parameter block. The number of sectors may range from 1 
to 255. The logical sector numbers start at zero and is 
incremented in ones, so the I/O system must map these the 
logical sector numbers into tracks and sectors. The 
logical sector 0 corresponds to track 0, sector 1. 

The error codes are defined as follows: 

0 Write protected 

2 Not ready 

4 Data (CRC) error 

6 Seek error 

8 Record not found 

10 Write fault 

12 Other errors 


258 



MSX-DOS AND DISK BASIC DISK DRIVER 


DSKCHG 


Inputs: 

[A] = Drive number 

CBJ =0 

[C] = Media descriptor 

[HLl = Base address of DPB 

Outputs: 

If successful: 

Carry flag reset, 
tB] = Disk change status 

1 Disk unchanged 

0 Unknown 

-1 Disk changed 

ELSE: 

Carry flag set, 

Error code in [A] (same as DSKIO above) 


[NOTE] 

If the disk has been changed or may have been 
(Unknown), read the boot sector or the first byte 
FAT of the currently inserted disk and transfer a 
as with the GETDPB call described below. 

Registers: 

AF, BC, DE, HL,IX, IY may be affected. 


changed 
of the 
new DPB 


259 



MSX-DOS AND DISK BASIC DISK DRIVER 


GETDPB 


Inputs: 

lA] = Drive number 
[B] = First byte of FAT 

tC] = Media descriptor 
[HL] = Base address of DPB 

Outputs: 

[HL+1] .. [HL+18] = DPB for the specified drive 
The Drive Descriptor Block (DPB) is defined as follows: 


MEDIA 

Byte 

SECSIZ 

Word 

DIRMSK 

Byte 

DIRSHFT 

Byte 

CLUSMSK 

Byte 

CLUSSHFT 

Byte 

FIRFAT 

Word 

FATCNT 

Byte 

MAXENT 

Byte 

FIRREC 

Word 

MAXCLUS 

Word 


FATSIZ 

Byte 

FIRDIR 

Word 

Note 

that the 


Media type 

Sector size (Must be 2 A n ) 

(SECSIZ/32) -1 

Number of one bits in DIRMSK 
(Sectors per cluster)-1 
(Number of one bits in CLUSMSK)+1 
Logical sector number of first FAT 
Number of FATs 

Number of directory entries (Max=254) 
Logical sector number of where the data 
area starts 

(Number of clusters on drive [not 
including reserved sectors, FAT sectors, 
or directory sectors])+1 
Number of sectors used 

FAT logical sector number of start of 
directory 

logical sector number always begins at zero. 


260 



MSX-DOS AND DISK BASIC DISK DRIVER 


CHOICE 

Returns in [HL3 the pointer to the character string 
(terminated by a zero) that is used as a user prompt in 
menu form by the main code. The simplest form of the 
routine be as follows. 

CHOISE: LD HL,CHOMSG 

RET 

♦ 

t 

CHOMSG: DEFB '1 - Single sided, 8 sectors',CR,LF 

DEFB '2 - Single sided, 9 sectors',CR, LF 

DEFB '3 - Double sided, 8 sectors',CR,LF 

DEFB '4 - Double sided, 9 sectors',CR,LF 

DEFB 0 

If there is no choice (i.e. , only one format is supported), 
return with 0 in [HL] register. 

All registers except SP may be affected. 


261 



MSX-DOS AND DISK BASIC DISK DRIVER 


DSKFMT 

Formats a disk, both physically and logically. The input 
parameters are as follows. 

[A] Choice specified by the user (1 to 9). 

Meaningless unless there is a choice. 

CD3 Drive number, beginning at zero 

IHL] Beginning address of the work area which 

can be used by the format process. 

[BC] Length of the work area described above. 

All registers except SP may be affected. 

This routine formats all of the disk's tracks physically, 
writing the boot sector, and clearing FATs and directory 
entries. 

'Clearing FATs' means: 

Writing the media descriptor byte at the first 
byte, writing OFFH at the second and the third 
byte, and filling the remainder with 0's 

'Clearing directory entries' means: 

Filling all bytes with 0's 

If the format ends successfully, return with carry 
flag reset, otherwise return with carry flag set. 

The error codes are defined as follows: 

0 Write protected 

2 Not ready 

4 Data (CRC) error 

6 Seek error 

8 Record not found 

10 Write fault 

12 Bad parameter 

14 Insufficient memory 

16 Other errors 

[NOTE] 

No prompting messages should be generated by this routine. 


OEMSTATEMENT 

Statement for system expansion for use by OEMs. After 
disk BASIC scans its own expanded statements, control is 
passed to this entry. The calling sequence is identical 
to using a general-purpose expansion statement handler. 
If your ROM does not have expansion statements, set the 
carry flag and do a Z80 'RET' instruction. 


262 



MSX-DOS AND DISK BASIC DISK DRIVER 


***************************************** 

* * 

* Some useful external routines * 

* * 
***************************************** 

PROMPT 

Prints a message as follows and waits for the user to 
enter a key from the keyboard. 

1 Insert diskette for drive X: 
and strike a key when ready' 

The 'X' is the drive name of the current target drive of 
your cartridge. 

SETINT 

This routine saves a previously set interrupt hook to a 
location specific to your cartridge, and sets the new 
interrupt hook. The address of the interrupt routine 
should be passed via the [HL3 register. See DSKDRV.Z80 
for details. 

PRVINT 

This routine jumps to the interrupt hook that you might 
have overwritten. Requires no argument. See DSKDRV.Z80 
for details. 

GETSLOT 

Gets the slot address (i.e., where I am) in CAI. 

Preserves DE, IX, IY 

GETWRK 

Gets the base of the work area in [IX] and [HLJ. 

Preserves DE, IY 

DIV16 

[BC1=[BC]/[DE], remainder in [HLl. 

Preserves DE, IX, IY 

ENASLT 

Enables a slot at an address specified by tA] and [HLJ , 
respectively. Destroys all registers. 


XFER 

Moves [BCJ bytes from [HLJ to [DE] (i.e., LDIR) 

Preserves AF, IX, IY 

BC is set to 0, HL, and DE pointing to the next location 
of source and destination, respectively. 

Use this routine when a read/write operation is requested 
to 4000H..7FFFH, and your hardware does not have any 
special mechanism to transfer directly to these areas. 


263 



MSX-DOS AND DISK BASIC DISK DRIVER 


***************************************** 

* * 

* External variables * 

* * 

***************************************** 

$SECBUF 

Pointer to a temporary storage which is at least SECLEN 
byte long. Prepared for use combined with the XFER 
subroutine described above, but can be used TEMPORARILY 
for any purpose. 

RAMADO, RAMAD1, RAMAD2, RAMAD3 

Slot address of RAM (if present) at 

0000H..3FFFH, 4000H..7FFFH, 800OH..BFFFH, COOOH.FFFFH 
respectively. 

RAWFLG 

Read-After—Write flag. When this byte contains non-0 
value, the disk driver should do a read-after-write check. 
However, it is completely up to the driver whether to do 
the check or not. 


264 



MSX-DOS AND DISK BASIC DISK DRIVER 


How to determine media types 

a) Read the boot sector (track 0, sector 1) of the target drive. 

b) Check if the first byte is either 0E9H or 0EBH (the JMP 
instruction on the 8086) 

c) If step b) fails, the disk is a version prior to MS-DOS 2.0; 
therefore, use the first byte of FAT passed from the caller and 
make sure it is between 0F8H and OFFH. 

If step c) is successful, use this as a media descriptor. 

If step c) fails, then this disk cannot be read. 

d) If step b) succeeds, read bytes # OB to # ID. This is the 
DPB for MS-DOS, Version 2.0 and above. The DPB for MSXDOS can 
be obtained as follows. 


Contents of MS-DOS boot sector 


+00 

0 E9H, XX, XX or 0EBH, XX, XX 


+03 

ASCII string of OEM name 


+0B 

Bytes per sector 

(low) 

+0C 


(high) 

+0D 

Sectors per cluster 


+0 E 

Number of reserved sectors 

(low) 

+0 F 


(high) 

+10 

Number of FATs 


+11 

Number of directory entries 

(low) 

+12 


(high) 

+13 

Total number of sectors in the media 

(low) 

+14 


(high) 

+15 

Media descriptor 


+16 

Number of sectors per FAT 

(low) 

+17 

(high) 

+18 

Sectors per track 

(low) 

+19 

(high) 

+1A 

Number of heads 

(low) 

+1B 


(high) 

+1C 

Number of hidden sectors 

(low) 

+1D 


(high) 


265 



MSX-DOS AND DISK BASIC DISK DRIVER 


MS-DOS Disk formats 

For 3, 3.5, and 5 inch disks (IBM PC format) 



First digit : 
Second digit: 
Third digit : 


track number 8=80, 4=40 
Sector count 8 or 9 
Head count I or 2 


1-—- — -- 

-*1— 

- T“ 

-- 

- f— 

-Tf 

- 

- 1— 

- 

-1 

1 

1 

891 1 

892 i 

881 l 

8821 1 

491 i 

492 1 

481 1 

482 f 


-+- 

- 1 - 

—-H- 

- 4 — 

-4-4- 

- -| - 

^ *-- 

— -f* - ■ 

-4 

1 Root directory 

1 

112 1 

112 1 

1121 

1121 1 

641 

1121 

64! 

1121 

1 entry 

1 

1 

1 

1 

1 1 

1 

1 

1 

1 


-+- 

-4— 

- +_ 

-“I—' 

-4-4-- 

- h- 

— --1- 

-+_ 

- 1 

iMedia descriptor 1 0F8HI 0F9HI OFAH 1 OFBHl ll 

QFCH10FDH10FEH10FFH1 

1 byte (FATID) 

1 

1 

1 

1 

1 1 

1 

1 

1 

1 



- +_ 

- +_ 

-h— 

“ -1- + - 

-4— 

-4— 

-4— 

- ^ 

(Sectors per FAT 

1 

21 

31 

11 

21 1 

21 

21 

1 1 

1 1 


-+- 

- 

-+“ 

-4— 

-4-4-- 

-4— 

-4_. 

-4— 

- 4 

1 Sectors/track 

1 

91 

91 

81 

81 1 

9 t 

91 

81 

81 


- +— 

- +_ 

- + _ 

“-"f- 

-4-4- 

-4— 

-1~_. 

-+“ 

-4 

(No. of sides 

1 

11 

21 

11 

21 1 

1 1 

21 

11 

21 


- ~h~ 

- +- 

- 4_. 

-4~. 

-4-4- 

-+_ 

-1-_. 

-4— 

-4 

1 Tracks/side 

i 

80 1 

80 1 

80 1 

80! 1 

40 ! 

40 1 

40 1 

40 1 

1- 

-+- 

■-h 

-4— 

-1— 

-4-4- 

- 

-4— 

-+_ 

-4 

iBytes/sector 

i 

5121 

5121 

5121 

5121 1 

512 1 

5121 

5121 

5121 


“+"■ 

-+_ 

--f-~ 

-4— 

-4-4- 

-4— 

-4— 

-4— 

-4 

iNo. of FATs 

i 

21 

21 

21 

21 1 

21 

21 

21 

21 


-+- 

“ “ “—f— 

-4— 

-4— 

-4-4- 

-4— 

- 

-4— 

- 1 

1 Sectors/cluster 

i 

21 

2! 

21 

21 1 

11 

21 

1! 

21 


--i— 

-1— , 

-1- 

-1_. 

-U-L- 

_U~ 

_L_, 

_l_ 

— —— 4 


266 














MSX-DOS SYSTEM CALLS 


3.6 MSX-DOS System Calls 

1) File Control Block (FCB) and Directory Entry 


User-set record size (Default=128 bytes)--. 

I 

r- Drive name (0=default, 1=A:) Current block I 

I I I 

+00 I I 

r-H- ---1 -t- 

I I File name I I I 

L-+- H H-h--|-H-+--H-H-H-H-H-H-H- J 

+16 

r ~* “ ^ +" “ " +" — “ +“— +” — — "f—-+—— — +“-+" " “ 4— — — *1— — — +— — — +— — — 4— — — +— — i 

I File size t Date I Time III I I I 


III I I 

Device ID —* I I I I 

11 I I 

Directory location - J I I I 

I I I 

First cluster of a file - J I I 

I I 

Last cluster accessed — 1 I 

Last cluster (relative to the beginning of a file) accessed J 


p- Current record 
I 

+3 2 

p-r-1-i-1-r 

I 1 Random record I 

1 --|———i-j———4—— — i 

size is greater than 63 
size is less than 64 


I < —Valid—> I 
I 

I <-Val id— 


■*1 


If record 
If record 


Directory format 
+00 


File attributes 

I 


--1-1— 

I File name I I 

h———H— — —I—- — -I-1— 

+16 

)-^4--(— |-|- y— |— |— 1-1— 

I I Time I Date I First I 


—-t-H-H-H 

-H-H-H--4 

File size I 


J 


First cluster of a file - J 


267 















MSX-DOS SYSTEM CALLS 


2) Drive Parameter Block (DBP) 


+00 


- Drive number 

i— Media ID byte 
I r— Sector size 

I I r— Directory mask 

I l I i— Directory shift 

I I II r— Cluster mask 

I l III i— Cluster shift 

I | I I I I ■— First FAT sector 

| | I I I I I *— # of FATs 

I | I I I I I I r— # of direct 

I I I I I I I II entries 


ory 



I III I 

I III 1 — Pointer to FAT 

I I I *— First directory sector 

l I 1 — # of sectors per FAT 

I 1 — # of clusters + 1 

*■— First data sector 


3) File Allocation Table (FAT) 

MSB LSB 


0 

r — 1 

o 
-J 1 
1 

06 

05 

04 

03 

02 

01 

00 

n 

1 

1 


4 

PAT 

n 

1 

1 03 

i 

02 

01 

00 

■1 

111 

1. 

10 

09 

08 

1 

l 




2 

in 

10 

09 

08 

07 

06 

05 

04 

“H 

i 


FAT 

1 

3 

1 07 

06 

05 

04 

03 

02 

01 

00 

1 

l 


PAT 

0 

4 

103 

1 

02 

01 

00 

111 

10 

09 

08 

i 



4 

5 

in 

10 

09 

08 

07 

06 

05 

04 

i 

_ a 


FAT 

3 


268 




















MSX-DOS SYSTEM CALLS 


4) System call entry 

F37DH - MSX disk BASIC 
00OSH - MSX-DOS 

To invoke a system call, call this entry with C register 
containing the function number. 


5) System call specification 

[Notes] 

1) 'Compatibility' means 'compatibility with CP/M'. 

CP/M is a registered trademark of Digital 
Research, Inc. 

2) Function calls entitled 'no function' will only 
return a 0 in the A register. 


00 SYSTEM RESET 

Parameters: 
Returns: 
Function: 


Compatibil ity: 


01 CONSOLE INPUT 

Parameters: 

Returns: 

Function: 


Compatibil ity : 


02 CONSOLE OUTPUT 

Parameters: E 

Returns: None 

Function: Outputs character in E to the console. 

Compatibility: Yes 


None 

A 

Inputs a character from the console. 
Checks control-C and does function 00. 
Checks control-p and begins echoing to 
the printer. 

Checks control-N and stops echoing to 
the printer. 

Echoes the input character. 

Yes 


None 

None 

If MSX-DOS 

Jumps to 0O00H. 

El se 

Jumps to warm start of disk BASIC. 

Yes 


269 



MSX-DOS SYSTEM CALLS 


03 AUX INPUT 


Parameters: None 

Returns: A 

Function: Inputs 

Compatibility: Yes 


character from an AUX device. 


04 AUX OUTPUT 

Parameters: 
Returns: 
Function: 
Compatibility: 


E 

None 

Outputs character in E to an AUX device. 
Yes 


05 LST OUTPUT 

Parameters: 
Returns: 
Function: 
Compatibility: 


E 

None 

Outputs character 
Yes 


in E to the printer. 


06 DIRECT CONSOLE I/O 


Parameters: 

Returns: 

Function: 


Compatibility: 


E 

A 

If E is OFFH 

If no input from the console 
Returns 0. 

Else 

Returns the code. 

No check. 

No echo. 

Else 

Outputs character in E to the console. 
Yes 


07 DIRECT INPUT 

Parameters: 
Returns: 
Function: 


Compatibility: 


None 

A 

Inputs character from the console. 
No check. 

No echo. 

No (get I/O byte) 


270 



MSX-DOS SYSTEM CALLS 


0 8 DIRECT INPUT 

Parameters: 

Returns: 

Function: 


Compatibil ity: 


None 

A 

Inputs character from the console. 
Checks for control-C. 

Checks for control-P. 

Checks for control-N. 

No echo. 

No (set I/O byte) 


09 STRING OUTPUT 


Parameters: 

Returns: 

Function: 


Compatibility: 


DE 

None 

Outputs the string pointed to by 
DE to the console until a '$' is en¬ 
countered in the given string. 

Yes 


OA BUFFERED INPUT 

Parameters: 

Returns: 

Function: 


Compatibility: 


DE 

None 

Inputs the string from console beginning 
at IDE+2J until carriage return is 
input. 

[DE+1] is set to the length of input 
string, not including the terminator. 
The maximum length of the string is 
passed via [DE]. 

Yes 


OB CONSOLE STATUS 


Parameters: 

Returns: 

Function: 


Compatibility: 


None 

A 

If no input from the console 
Returns 0. 

Else 

Returns OFFH. 

Yes 


0C GET VERSION NUMBER 


Parameters: None 

Returns: H, L 

Function: Sets 0 

Compatibility: Yes 


in H register, 22H in L register. 


271 



MSX-DOS SYSTEM CALLS 


OD DISK RESET 


Parameters: 

Returns: 

Function: 


Compatibil ity: 


None 

None 

Sets default drive to (A:). 

Sets transfer address to 80H. 

Flushes out all sectors which have 
been changed but have not been written 
to disk. 

Yes 


OE SELECT DISK 

Parameters: 

Returns: 

Function: 

Compatibil ity: 


E 

None 

Sets the default drive, (with a 0 
corresponding to A:) 

Yes 


OF OPEN FILE 

Parameters: 
Returns: 
Function: 


Compatibility: 


DE 

A 

Opens a file specified by an FCB pointed 
to by DE. 

The record size field, the current 
block field, the current record field, 
and the random record field should 
be set after this function is executed. 
The file size field, the date and time 
fields, the device ID field, the 
directory location field, the first 
cluster field, the last cluster field, 
and the last accessed cluster field 
is copied from the directory. 

If successful 
Returns 0. 

Else 

Returns OFFH. 

Yes 


272 



MSX-DOS SYSTEM CALLS 


10 CLOSE FILE 


Parameters: 

Returns: 

Function: 


Compatibility: 


DE 

A 

Closes a file specified by an FCB 
pointed to by DE. 

If successful 
Returns 0. 

El se 

Returns OFFH. 

Yes 


11 SEARCH FIRST 

Parameters: 

Returns: 

Function: 


Compatibility: 


DE 

A 

Searches for the first occurrence of 
a file specified by an FCB pointed to 
by DE. 

If found 

The directory entry (32 bytes long) 
is copied to the transfer address. 
Returns 0. 

El se 

Returns OFFH. 

[Note] 

Wild card characters such as (* and 
?) are permitted in the file name. 

Yes 


12 SEARCH NEXT 


Parameters: 

Returns: 

Function: 


Compatibility: 


None 

A 

Searches for the next occurrence of 
a file specified by the last 'search 
first' function call. 

If found 

The directory entry (32 bytes long) 
is copied to the transfer address. 
Returns 0. 

Else 

Returns OFFH. 

[Note] 

Wild card characters such as (* and 
?) are permitted in the file name. 

Yes 


273 



MSX-DOS SYSTEM CALLS 


13 DELETE PILE 


Parameters: 

Returns: 

Function: 


Compatibility: 


DE 

A 

Deletes a file specified by an FCB 
pointed to by DE. 

If successful 
Returns 0. 

Else 

Returns OFFH. 

[Note] 

Wild card characters such as (* and 
?) are permitted in the file name. 

Yes 


14 SEQUENTIAL READ 

Parameters: 

Returns: 

Function: 


DE 

A 

Reads a record of a file specified 
by the FCB pointed to by DE and 
transfers the record to the transfer 
address. 

The record is determined by the current 
block field and the current record 
f iel d. 

The current block field and the current 
record field are automatically 
incremented upon return. 

The record size is always 128 bytes. 

If successful 
Returns 0. 

Else 

Returns 1. 


[NOTE] 

This system call is prepared to maintain 
compatibility with CP/M. The use of the 1 random 
block read' function is strongly recommended. 


Compatibility: Yes 


274 



MSX-DOS SYSTEM CALLS 


15 SEQUENTIAL WRITE 


Parameters: 

Returns: 

Function: 


DE 

A 

Writes a record to a file specified 
by the FCB pointed to by DE from the 
transfer address. The record is deter¬ 
mined by the current block field and the 
current record field. 

The current block field and the current 
record field are automatically 
incremented upon return. 

The record size is always 12 8 bytes. 

If successful 
Returns 0. 

Else 

Returns 1. 


[NOTE] 

This system call is prepared to maintain 
compatibility with CP/M. The use of the 'random 
block write' function is strongly recommended. 

Compatibility: Yes 


16 CREATE FILE 


Parameters: 
Returns: 
Function: 


Compatibility: 


DE 

A 

Creates a file specified by an FCB 
pointed to by DE. If the specified 
file already exists, it is overwritten. 
The record size field, the current 
block field, the current record field, 
and the random record field should 
be set after this function is executed. 
If successful 
Returns 0. 

Else 

Returns OFFH. 

Yes 


275 



MSX-DOS SYSTEM CALLS 


17 RENAME PILE 


Parameters: 

Returns: 

Function: 


Compatibility: 


DE 

A 

Renames a file name specified by an 
FCB pointed to by DE to a file name 
specified by an FCB pointed to by DE+16. 
If successful 
Returns 0. 

Else 

Returns OFFH. 

[Note] 

Wild card characters such as (* and 
?) are permitted in the file name. 

Yes 


18 GET LOGIN VECTOR 


Parameters: 

Returns: 

Function: 


Compatibil ity: 


None 

HL 

Returns a bit table for on-line drives. 
Unlike CP/M, all system drives are on¬ 
line . 

Yes 


19 GET DEFAULT DRIVE NAME 


Parameters: 
Returns: 
Function: 
Compatibility: 


None 

A 

Gets the default drive name. 
Yes 


1A SET DMA ADDRESS 

Parameters: 
Returns: 
Function: 
Compatibility: 


DE 

None 

Sets transfer address. 
Yes 


276 



MSX-DOS SYSTEM CALLS 


IB GET ALLOCATION 

Parameters: 

Returns: 

Function: 


Compatibility: 


E 

A, BC, DE, HL, IY 

Returns information of a drive specified 
by E. 

If drive name is valid 

A = Number of sectors/cluster 
BC = Sector size 
DE = Number of clusters on disk 
HL = Number of free clusters 
IX = Pointer to DPB 
IY = Pointer to FAT 

Else 

A = OFFH 

No (Get allocation address) 


277 



MSX-DOS SYSTEM CALLS 


System calls for CP/M version 2.0 or later 


1C NO FUNCTION 

Compatibility: No (Set write protect vector) 


ID NO FUNCTION 

Compatibility: No (Get write protect vector) 


IE NO FUNCTION 

Compatibility: No (Set file attributes) 


IF NO FUNCTION 

Compatibility: No (Get disk parameter address) 


20 NO FUNCTION 

Compatibility: No (Set/Get user code) 


21 RANDOM READ 

Parameters: DE 

Returns: A 

Function: Reads a record of a file specified 

by the FCB pointed to by DE and 
transfers the record to the transfer 
address. 

The record is determined by the random 
block field. The random block field 
is not affected by this function. 

The record size is always 128 bytes. 

If successful 
Returns 0. 

Else 

Returns 1. 

[NOTE] 

This system call is prepared to maintain 
compatibility with CP/M. The use of the 'random 
block read' function is strongly recommended. 

Compatibility: Yes 


278 



MSX-DOS SYSTEM CALLS 


22 RANDOM WRITE 


Parameters: 

Returns: 

Function: 


DE 

A 

Writes a record to a file specified 
by the FCB pointed to by DE from the 
transfer address. The record is 
determined by the random block field. 
The random block field is not affected 
by this function. 

The record size is always 128 bytes. 

If successful 
Returns 0. 

Else 

Returns 1. 


[NOTE] 

This system call is prepared to maintain 
compatibility with CP/M. The use of the 'random 
block write' function is strongly recommended. 

Compatibility: Yes 


23 GET FILE SIZE 


Parameters: 

Returns: 

Function: 


Compatibility: 


DE 

A 

Calculates the file size (a multiple 
of 12 8) of the file specified by the 
FCB pointed to by DE, and sets the 
file size to the random record field 
of the given FCB. 

If successful 
Returns 0. 

Else 

Returns OFFH. 

Yes 


24 SET RANDOM RECORD 


Parameters: 

Returns: 

Function: 


Compatibil ity: 


DE 

None 

Calculates the current record position 
from the current block field and the 
current record field of the given FCB 
pointed to by DE, and sets the record 
position to the random record field 
of the given FCB. 

Yes 


279 



MSX-DOS SYSTEM CALLS 


System calls for CP/M version 2.2 or later 


25 NO FUNCTION 

Compatibility: No (Resets disk drive) 


26 RANDOM BLOCK WRITE 


Parameters: 

Returns: 

Function: 


Compatibility: 


DE, HL 
A 

Writes records to a file specified 
by the FCB pointed to by DE from the 
transfer address. The record is 
determined by the random block field. 
The current random record field is 
automatically incremented upon 

successful return. The record size is 
determined by the record size field. 

The number of records to write is passed 
via HL. 

If successful 
Returns 0. 

Else 

Returns 1. 

No (No function) 


27 RANDOM BLOCK READ 


Parameters: 

Returns: 

Function: 


Compatibil ity: 


DE, HL 
A, HL 

Reads records of a file specified by 
the FCB pointed to by DE and transfers 
the record to the transfer address. 
The record is determined by the random 
block field. The current random record 
field is automatically incremented 
upon successful return. 

The record size is determined by the 
record size field. 

The number of records to read is passed 
via HL. 

The number of records actually read is 
returned in HL. 

If successful 

Returns 0 in A. 

Else 

Returns 1 in A. 

No (No function) 


280 



MSX-DOS SYSTEM CALLS 


28 RANDOM WRITE WITH ZERO FILL 


Parameters: 
Returns: 
Function: 


DE 

A 

Writes a record to a file specified 
by the FCB pointed to by DE from the 
transfer address. The record is 
determined by the random block field. 
The random block field is not affected 
by this function. 

The record size is always 128 bytes. 

When extending a file, all records that 
are not written are filled with 0's. 

If successful 
Returns 0. 

Else 

Returns 1. 


Compatibility: Yes 


281 



MSX-DOS SYSTEM CALLS 


System calls for MSX-DOS only 


29 NO FUNCTION 

Compatibility: No 


2A GET DATE 

Parameters: 

Returns: 

Function: 


Compatibil ity: 


26 SET DATE 

Parameters: 

Returns: 

Function: 


Compatibil ity: 


2C GET TIME 

Parameters: None 

Returns: H, L, D, E 

Function: H = hours 

L = minutes 
D = seconds 
E = 1/100 seconds 
Compatibility: No 


HL, DE 
A 

Sets current date to the date passed 
via registers. 

The registers are as for 'get date'. 

If successful 
Returns 0. 

Else 

Returns OFFH. 

No 


None 

HL, DE, A 
HL - year 
D = month 
E = day 

A = day of the week 
No 


282 



MSX-DOS SYSTEM CALLS 


2D SET TIME 

Parameters: 

Returns: 

Function: 


Compatibility: 


H, L, D, E 
A 

Sets current time to the date passed 
via registers. 

The registers are as for 'get time'. 

If successful 
Returns 0. 

Else 

Returns QFFH. 

No 


2E SET/RESET VERIFY FLAG 


Parameters: 
Returns: 
Function: 


Compatibil ity: 


E 

None 

If E is 0 

Reset verify flag. 

Else 

Set verify flag. 

No 


2F ABSOLUTE DISK READ 


Parameters: 

Returns: 

Function: 


Compatibility: 


DE, H, L 
None 

Read H sectors from logical sector 
number DE on the drive specified by 
L to the transfer address. 

No 


3 0 ABSOLUTE DISK WRITE 


Parameters: 

Returns: 

Function: 


Compatibility: 


DE, H, L 
None 

Write H sectors to logical sector number 
DE on the drive specified by L from 
the transfer address. 

No 


283 



MSX-DOS SYSTEM CALLS 


6) Direct BIOS access of MSX-DOS 

On many CP/M application programs, the BIOS jump table is directly 
referenced by adding offsets to the contents of addresses 1 and 
2. To make the above programs work, MSX-DOS creates a CP/M-style 
BIOS front end, vectored by the contents of addresses 1 and 2. 
Due to the differences in file handling between MSX-DOS and CP/M, 
only the following entries are guaranteed. 

BOOT Cold boot 

WBOOT Warm boot 

CONST Console status 

CONIN Console input 

CONOUT Console output 


284 



MSX-DOS SYSTEM CALLS 


7) Zero page usage and 

00 JP WBOOT 

01 

02 

03 

04 

05 JP BDOS 

06 
07 
08 
09 
0A 
0B 

0C JP RDSLT 

OD 
OE 
OF 
10 
11 
12 

13 

14 JP WRSLT 

15 

16 

17 

18 

19 
1A 
IB 

1C JP CALSLT 

ID 

IE 

IF 

20 
21 
22 

23 

24 JP ENASLT 

25 

26 

27 

28 
29 
2 A 
2B 
2C 
2D 
2E 
2F 


memory map of MSX-DOS 

(Used) 
(Used) 
(Used) 


(Used) 
(Used) 
(Used) 


(Used) 
(Used) 
(Used) 


(Used) 
(Used) 
(Used) 


(Used) 
(Used) 
(Used) 


(Used) 

(Used) 

(Used) 


285 



MSX-DOS SYSTEM CALLS 


30 

JP 


CALLF 

(Used) 

31 




(Used) 

32 




(Used) 

33 





34 





35 





36 





37 





38 

JP 


INTRPT 

(Used) 

39 




(Used) 

3A 




(Used) 

3B 

— 

“1 



3C 


1 



3D 


1 



3E 


1 



3F 


1 



40 


1 



41 


1 



42 


1 



43 


1 



44 


1 



45 


1 



46 


1 



47 


1 



48 


1 



49 


1 



4 A 


1 



4B 

4C 


h - 

| 

Routine to switch 

secondary slot 

4D 


1 


(Used) 

4E 


1 



4F 


1 



50 


1 



51 


1 



52 


1 



53 


1 



54 


1 



55 


1 



56 


1 



57 


1 



58 


1 



59 


1 



5A 


1 



5B 

— 

J 




286 




MSX-DOS SYSTEM CALLS 


5C FCB for first argument 

5D 

5E 

5F 

60 

61 

62 

63 

64 

65 

66 

67 

68 

69 
6A 
6B 

6C FCB for second argument 

6D 

6E 

6F 

70 

71 

72 

73 

74 

75 

76 

77 

78 

79 
7A 
7B 
7C 
7D 
7 E 
7F 

80 Default DMA address 


m • 

FF 

100 TPA 

The word at addresses 6 and 
memory + 1' for the TPA. 


(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 
(Used) 


7 contains the 'highest available 


287 



MSX-DOS SYSTEM CALLS 


The entry addresses for RDSLT, WRSLT, ENASLT, CALSLT, and CALLF 
are identical to the ROM BIOS. However, pay GREAT attention when 
using these entries directly. You must make sure that the stack 
area is guaranteed when changing slots. For example, when calling 
the ROM BIOS routines from MSX-DOS through CALSLT, page 0 is set 
to ROM, and when an interrupt occurs when the ROM BIOS is active. 
Page 1 may be set to ROM (i.e., the disk ROM), because some 
manufacturers are using the timer interrupt hook to stop the motor. 


[Memory Map] 


Page 3 


RAM 


Page 2 


Page 1 


Page 0 


r ———-—i 


ROM 

BIOS 



r— — —— — 

l 

i 

T 

1 

1 


l 

1 RAM 

1 

1 

1 

1 

1 

1 

1 

1 


1 

1 

1 

1 f 

1 1 

[Disk 1 

1 RAM 

1 

1 ROM 1 

i 1 


1 

1 

1 

l l 

1 #1 1 

1 1 


1 

J 

i--a 


i-* 


Disk I 
ROM I . . 
I 

#2 I 


I 

RAM I 


L 

1 - Always contained at 1 non-expanded slot #0* 

'secondary slot #0 of expanded slot #0' 


or 


288 


















MSX-DOS SYSTEM CALLS 


FCB organization (for disk BASIC) 


NOTE 

The following information is 
only for use by advanced pro¬ 
grammers. Please ignore it if 
you do not understand it. 


The FCB holds information about file channels. Each channel is 
allocated 265 bytes, 9 bytes of which are used by the BASIC 
interpreter, and the other 256 bytes for buffering. 


lOffsetl Label 

1 1 (For SPCDSK) 

1 Meaning 

1 (For MSX Disk BASIC) 


1 

1 

1 +0 

1 FL.MOD 

1 Mode which the file was 

opened for 

-4 

l 

1 +1 

1 FL.FCA 

1 Pointer to FCB for BDOS 

(low) 

1 

1 +2 

1 FL.LCA 

1 Pointer to FCB for BDOS 

(high) 

1 

1 +3 

1 FL.LSA 

1 Back up character 


1 

1 +4 

I FL.DSK 

1 Device number 


1 

1 +5 

1 FL.SLB 

1 


| 

1 +6 

1 FL.BPS 

1 Position in FL.BUF 


1 

1 +7 

1 FL.FLG 

1 Holds various information 

1 

1 +8 

1 FL.OPS 

1 Pseudo head position 


1 

1 +9.. 

1 FL.BUF 

1 256-byte file buffer 


1 

1 __ 

- J- —- 

- J- 


4 


289 










RS-232C SUPPORT 


4. Other Expansions 

4.1 MSX RS-232C Support 

4.1.1 Extended BASIC for RS-232C Communication 

1) Set up Communication Parameters 

2) Open and Close Communication Channels 

3) Sequential Input and Output 

4) Program Load/Save Statements 

5) Event Trap Control Statements 

6) Miscellaneous Control Statements 

7) Functions 

8) Terminal Mode 

9) Help Function (Optional) 

10) Behavior of Control Signals 

11) Handling of EOF 

4.1.2 Extended BIOS Calls Handling RS-232C 

Build a Slot Address Table Entry to the Jump Table 

Return Number of Channels 

Description of each Extended BIOS Call 

4.2 Other MSX Extended BIOS Calls 

4.2.1 Extended BIOS Calls 

1) Broad Cast Command 

2) System Exclusive Extended BIOS Call 

3) Summary of Extended BIOS Calls 

4.2.2 Extended BIOS Maker ID Number 

4.3 Ter.key Support on MSX 


290 



RS-232C SUPPORT 


4.1 MSX RS-232C Support 

This section describes the specifications of the support for the 
RS-232C communication interface on MSX computers. 

4.1.1 Extended BASIC for RS-232C Communication 
1) Set up Communication Parameters 


CALL COMINI [([<string exp>][,[<Rx baud rate>][,[<Tx baud rate>] 

[,[<time out>]3 ] J) ] 

Initializes an RS-232C port with the specified parameters. The 
<string exp> is a string that specifies the channel control 
parameters. See the detailed desciption below. 

BAUD RATE 

It is possible to set a different baud rate for transmitter and 
receiver. The possible baud rates are as follows: 

50 110 600 1800 2400 4800 9600 

75 300 1200 2000 3600 7200 19200 

When only the receiver's baud rate is specified, the baud rate 
for the transmitter assumes the same speed as the receiver. 
When only the transmitter's baud rate is specified, the baud 
rate for the receiver is set to the default value. 

If a negative value is specified, its absolute value is written 
to i8253 Timer/Counter directly. 


TIME OUT 

The RS-232C driver waits for the CTS (Clear To Send) to turn on 
or/and XON is received when the character is sent. The driver 
generates a time out error if the specified time has elapsed. 
The value for the time out error is specified in seconds. If 
zero (0) is specified, the driver does not generate a time out 
error, and the driver waits indefinitely. 


291 



RS-232C SUPPORT 


STRING FIELDS 


"[0:][8[N[l[X[H[N[N[N]]]]]]]] n 
I I I I I I I I I 



Channel Number 

When the system has more than one 
channel, this parameter specifies 
the channel number, and it may be 
omitted if the system has only one 
channel. The default value is 0. 

Data length 
"5": 5 bits 

"6": 6 bits 

"7": 7 bits 

"8": 8 bits 

Parity flag 
"E": Even parity 
”0": Odd parity 

"I": Ignore (Illegal when data 

length is 8 bits) 

"N": No parity 
Length of stop bits 
"1"; 1 bit 

"2": 1.5 bits 

"3": 2 bits 

XON/XOFF control 
"X": Enable control 
"N": Disable control 
CTS-RTS hand-shake 
"H": Handshaking 
"N": No handshaking 
Insert Line Feed to buffer when 
Carriage Return is received. 

"A": Insert Line Feed to buffer 

"N": Do not insert 
Send Line Feed after Carriage 
Return sent. 

"A": Do not send Line Feed 
"N": Send Line Feed 
Shift-in/Shift-out control. Illegal 
when data length is other than 7 bits. 
"S": Enable control 
"N": Disable control 


Examples: 

CALL COMINI (" 0 : 7E1XHNNN" ,600,1200,30) 

CALL COMINI (" 8N1" , 96 00) 

The default values for those switches are as follows: 

"0:8E3XHNNN",1200,1200,0 

Note that no previous value is taken as the default. If 
omitted, the above values are always assumed. 


292 



















RS-232C SUPPORT 


2) Open and Close Communication Channels 


OPEN "COM[n]: n [FOR <mode>] AS [#] <file number> 

This statement opens the RS-232C channel for further 
processing. That is, a I/O buffer is allocated and the mode 
that will be used with the buffer is set. The RTS signal is 
also activated. 

The <mode> is one of the following: 

OUTPUT: Specifies sequential output mode 
INPUT : Specifies sequential input mode 

If the <mode> clause is not specified, the channel can be 
accessed for both input and output and no EOF character 
handling is done. 

The <file number> is an integer expression whose value is 
between one and the maximum number of files specified in a 
MAXFILES= statement. 

The <file number> is the number that is associated with the 
file for as long as it is OPEN and is used by other I/O 
statements reffering to the file. 

An OPEN statement must be executed before I/O may be done to 
the file using any of the following statements. The OPEN 
statement must be executed before any statement or function 
requiring a file number: 

PRINT #, PRINT # USING 
INPUT #, LINE INPUT # 

INPUTS 

Example: 

OPEN "COMO:" AS #1 


NOTE 

Random access to RS-232C channel is 
not possible. Logically, only sequential 
accesses are permitted. 


CLOSE [[#]<file number >[ ,<file number>]3 

Closes the channel and releases the associated buffer. If no 
<file number>s are specified, all open channels are closed. 

If the channel was opened in output mode, the EOF character is 
sent. 


293 



RS-232C SUPPORT 


3) Sequential Input and Output 

After the channel is opened in input mode or file mode (open 
without <mode> clause), characters from communication channel 
can be sequentially input by one of the following statements. 

INPUT #n 
LINE INPUT #n 
INPUT$ (#n,m) 

After the channel is opened in output mode or file mode (open 
without <mode> clause),characters can be sequentially output to 
the communication channel by one of the following statements. 

PRINT #n 
PRINT #n USING 

Refer to the reference manuals for the language for details on 
the statements. 


4) Program Load/Save Statements 
SAVE n COM[<n>: 3 " [, A] 

Sends a BASIC program to the communication channel. A Control-Z 
is treated as the end-of-file character. The program is sent 
in ASCII format, whether the optional parameter, "A", is 
specified or not. No file name is allowed. 

LOAD "COM[<n>:]“ 

Loads a BASIC program from the channel. A LOAD statement closes 
all open files and deletes the current program from memory. If 
the "R" option is specified, however, all data files remain 
OPEN and the program that is loaded is also executed. A 
Control-Z is treated as the end—of—file character. 

MERGE "COM[<n>: ] " 

Merges lines from a program in ASCII format received through 
the communication channel into the program currently in memory. 

If some of the line numbers of the program in memory match line 
numbers of the incoming (channel) program, the lines from the 
program from the channel replaces the matching lines. A 
Control-Z is treated as the end-of-file character. 

After the MERGE command, the merged program will reside in 
memory, and control will return to BASIC at the command level. 

RUN "COM[<n>: ] " [,R] 

Loads a program from the channel into memory and runs it. 

RUN closes all open files and deletes the current contents of 
memory before loading the designated program. When the "R" 

option is specified, however, all data files remain OPEN. 


294 



RS-232C SUPPORT 


5) Event Trap Control Statements 
CALL COMON("[<n>:]") 

Enables event trapping caused by incoming character from the 
communication channel. 

CALL COMOFF("[<n>:3") 

Disables event trapping caused by incoming character from the 
communication channel. The communication buffer is flushed. 

CALL COMSTOPC [<n>: ] ") 

Suspends event trapping caused by incoming character from the 
communication channel. 

CALL COM ([<n>: ] ,GOSUB Cline number>) 

Sets the line numbers for BASIC to trap when characters are 
received at the communication channel. 

When trap occurs, since CALL COMSTOP is automatically executed, 
received traps can never take place. The RETURN from the trap 
routine will automatically do CALL COMON unless CALL COMOFF 
has been explicitly performed inside the trap routine. 

Event trapping does not take place when BASIC is not executing 
a program. When an error trap (resulting from an ON ERROR 
statement) takes place, it automatically disables all trapping 
(including ERROR, STRIG, STOP, SPRITE, INTERVAL and KEY). 


6) Miscellaneous Control Statements 

An OPEN statement must be executed before any one of following 
statements may be executed. The default channel number is 0 
for all the following statements. 


CALL COMBREAK(["<n>:"],<expression>) 

Sends break characters specified by <expression> to the channel 
specified by <n>. The range of the <expression> should be 
between 3 and 32767. 

CALL COMDTR(["<n>:"],<expression>) 

Turns off the DTR signal when the <expression> is zero, 
otherwise turns on the DTR signal. 


CALL COMSTAT (["<n>:"],<name of variable^ 

Reads the status of the communication channel. The status 
returned by the hardware is assigned to the variable. The 
bit assignments are as follows: 


295 



RS-232C SUPPORT 


BIT NO. 

“ *T - *' 

1 

*-+- 

Description 

1 

15 

i 

Buffer Overflow Error 

— -l 
1 


1 

0: No buffer overflow 

1 


1 

1: Buffer overflow 

1 

14 

1 

Time Out Error ( TMENBT ) 

1 


1 

0: No time out error occurred 

1 


1 

1: Time out error occurred 

1 

13 

1 

Framing Error 

1 


1 

0: No framing error occurred 

1 

12 

1 

1: Framing error occurred 

1 

1 

Over Run Error 

1 


1 

0: No over run error occurred 

t 


1 

1: Over run error occurred 

1 

11 

1 

Parity error 

I 


1 

0: Character has no parity error 

1 


1 

1: Character has parity error 

1 

10 

1 

Control break key was pressed ( BRONBT ) 

1 


1 

0: Control break key not pressed 

1 


1 

1: Control break key was pressed 

1 

9 

1 

Not used: Reserved 

1 

8 

1 

Not used: Reserved 

1 

7 

1 

Clear To Send 

1 


1 

0: False 

1 


1 

1: True 

1 

6 

1 

Timer/Counter Output-2 

1 


1 

0: Timer/Counter Output-2 negated 

1 


1 

1: Timer/Counter Output-2 asserted 

1 

5 

1 

Not used: Reserved 

1 

4 

1 

Not used: Reserved 

1 

3 

1 

Data Set Ready 

1 


1 

0: False 

1 


1 

1: True 

1 

2 

1 

Break Detect 

1 


1 

0: Not detected 

1 


1 

1: Detected 

1 

1 

1 

Ring Indicator 

1 


1 

0: False 

I 


1 

1: True 

1 

0 

1 

Carrier Detect 

1 


1 

0: False 

1 


1 

1: True 

1 


-J- 


-1 


296 







RS-232C SUPPORT 


7) Functions 
EOF(<file number>) 

Returns -1 (true) if the EOF character is received. Otherwise, 
returns 0. Use EOF to test for end-of-transmission during 
INPUT to avoid 1 Input past end' errors. 

LOCKfile number>) 

Returns the number of characters received in the communication 
buffer. The size of the communication buffer is 255 characters. 

LOF(<file number>) 

Returns the size of the free space remaining in the 
communication buffer. 


8) Terminal Mode 
CALL COMTERMl("<n>:") 

Enters a terminal emulator mode. The channel should be closed 
when this statement is invoked. The function keys have a 
special use in the terminal mode as described below. 

F-6: Toggles the literal mode on/off. In the literal mode, 
control characters are displayed, offset by 40H. As an 
example,a character whose code is 01H is displayed as "A". 
Initial mode: Literal mode off 

F-7: Toggles the Half/Full duplex modes. In Half duplex mode, 
the characters typed in are echoed to the screen as 
well as sent to the communication channel. 

Initial mode: Full duplex 

F-8: Turn on/off printer echo. When the printer echo is on, 
all characters sent to the screen are also echoed to the 
printer. 

Initial mode: Printer echo off 


297 



RS-232C SUPPORT 


9) Help Function (Optional) 

CALL COMHELPl (<n>:) ] 

Prints out a brief description of parameters set by 
statement on the screen as follows. 

Initialize statement options 

CALL COMINI (" 

<Device# {0,1,2...9}>: 

CCharacter length {5,6,7,8>> 

<Parity {E,0, I,N}> 

<Stop bits {1,2,3>> 

<XON/XOFF (X,N>> 

<CTS handshaking {H,N>> 

<Auto LF on receive {A,N)> 

<Auto LF on transmit {A,N}> 

<SI/SO (S,N}>" 

,<Receiver baud rate> 

,<Transmitter baud rate> 

) 

Default: 

CALL COMINI("0:8N1XHNNN" 

, 1200 , 1200 , 0 ) 


a COMINI 


298 



RS-232C SUPPORT 


10) Behavior of Control Signals 

RESET COMINI OPEN CLOSE 


RTS: Inactive No effect Active Inactive 

DTR: Active Active No effect No effect 

The RTS signal is affected in the following cases: 

1. OPEN statement executed: activated 

2. CLOSE statement executed: inactivated 

3. The remaining contents of the communication is less than 16 
bytes and the CTS-RTS handshake is enabled: inactivated. 

4. When inactive and the remaining contents of the communication 
buffer has more than one byte and CTS-RTS handshaking is 
enabled: activated. 

DTR is affected by the CALL COMDTR and CALL COMINI statements. 


11) Handling of EOF 

An EOF is transmitted when a CLOSE statement is executed during 
the open mode was output. 


299 




RS-232C SUPPORT 


4.1.2 Extended BIOS Calls Handling RS-232C 

The RS-232C driver can be used by application programs using 
the "EXTENDED BIOS CALL" routine. Such programs can access the 
functions in the RS-232C driver through the entry jump table 
with inter-slot call function provided in the BIOS. Programmers 
can determine the location of this table by usinc an EXTENDED 
BIOS CALL 0 and 1. 

The RS-232C driver is addressed by device number 8. The 
functions for the RS-232C driver supported by extended BIOS 
calls are described below. 


Build a Slot Address Table Entry to the Jump Table 
Number: 0 

Function: Builds entry address to the jump table in the device 

driver pointed by [HL]. 

Entry: [B] = Slot address of table entry for the device 

driver 

[HL] = Points to table entry for this device driver 
Exit: lB] = Slot address of next table entry 

[HLJ = Points to next table entry 
Description: The RS-232C device driver call routine can issue 
this function call to determine the slot number and 
the location of the jump table to access the device 
driver for the desired channel. 


[B] : [HL] 


[B] : [HL] —* 


returned* 


1 %Slot address 

lJump table 

address 

(L) 

(Jump table 

address 

(H) 

1 Reserved 

1 


— 

\ 




% The format of the slot address is same to the USX standard 
notation, which is: 

Bit # 76543210 
F000SSPP 
I Nil 

I I I LJ — Primary slot (0-3) 

I lx -Secondary slot (0-3) 

1 -1 if secondary slot specified 


300 










RS-232C SUPPORT 


Return Number Of Channels 

Number: 1 

Function: Returns the number of channels available to the 

device driver. 

Entry: [A] = Contains number of RS-232 channels so far. 

Exit: [A] = Number of RS-232 channels updated. 

Description: This function is provided for each RS232C driver 
so as to find the channel number for the driver. 
Each driver can call this function to get the number 
of RS-232C channels installed so far. 

The device information byte indicates whether the following 

options are installed or not: 


Bits 76543210 
I I I I I I I I 

I I I I I I i L -Reserved 

I I I I I I I 

I I I I I I 1 -TxReady interrupt 

I I I I I I 

I I 1 I I 1 -Sync/Break character detected 

till 1 -Timer interrupt 

I | | i-Carrier detect 

I I I 

! I 1 -Ring indicator 

| i-Reserved 

I 

1 -Reserved 


The RS 232C driver has entries as follows. Application programs 
can use the RS-232C driver by an ’inter-slot call' to those 
entries. 


EXBTBL: DEFB 
JP 
JP 
JP 
JP 
JP 
JP 
JP 
JP 

JP 

JP 

JP 

JP 

NOENT 

NOENT 

NOENT 


DVINFB,0,0 

INIT 

OPEN 

STAT 

GETCHR 

SNDCHR 

CLOSE 

EOF 

LOC 

LOF 

BACKUP 

SNDBRK 

DTR 


Device information 
Initialize RS-232C port 
Open RS-232C port 
Read status 
Receive data 
Send data 

Close RS-232C port 
EOF code received 

Reports the number of characters in 
the receiver buffer 
Reports the number of free spaces 
left in the receiver buffer 
Back up a character 
Send break character 
Turn on/off DTR line 
Reserved for future expansion 


301 


















RS-232C SUPPORT 


NOTE 

The RS-232C receiver is driven by the 
interrupt generated by the receiver ready. 
However, the inter-slot call handler dis¬ 
ables the interrupt automatically. Thus, 
when control returns to the application 
program, it must enable an interrupt as 
soon as possible, or the RS-232C receiver 
routine will lose some of the characters. 


302 



RS-232C SUPPORT 


Description of each Extended BIOS Call 

1) Initialize RS-232C Port (INIT) 

Entry: IHLJ = Address of the parameter table 

[BJ = Slot address of the parameter table 
Return: The carry flag is set if illegal parameters are set. 
Modify: [AF3 

Description: 

Initializes the RS-232C port with the specified parameters. 
This entry must be called before any other function calls are 
made. The parameters are similar to the _ COMINI expanded 
statement of BASIC. However, note that all the ASCII 
parameters must be specified with uppercase characters only. 
(See section 4.1.1 CALL COMINI for details of BAUD RATE and 
TIME OUT.) 


tB3 : EHL]—» I Character Length 

-- 

I Parity 1 E’ , 1 O' , ' I' , 1 N' 

f -*-— --— --— — — 

I Stop Bits *1 1 ,'2 *3 1 


i XON/XOFF Control ,'N' 

-- 

I CTR-RTS Handshaking ' H','N' 

I-- 

I Auto LF for Receiver * A','N' 
I Auto LF for Sender ’A’,'N' 


I SI/SO Control 'S','N' 

i- 

I Receiver Baud Rate (Low) 

i 

I 50-19200 (High) 

-- 

I Transmitter Baud Rate (low) 

i 

I 50-19200 (high) 

w —— - -- *- 

I Time Out Counter 0-255 



303 
















RS-232C SUPPORT 


2) Open RS-232C port (OPEN) 

Entry: [HL]= Address of FCB (must be located higher address 

than 8000H) 

[C] = Buffer length ( 32~254 ) 

[E] = Open mode (one of following): 


I Open Mode I Meaning I 

i-1-—-1 

I 1 I <lnput> mode 1 

I 2 I <Output> mode I 

I 4 I <Raw> and <Input/Output> model 


Returns: The carry flag is set if an error occurs. 
Modifies: (AF] 


Description: 

Opens the RS-232C port with the specified File Control Block 
(FCB). An Open must be executed before any I/O operations can 
be done. Each character received occupies two bytes in the 
buffer. One is the received character code itself and the 
other is the error status of the received character. An extra 
9 bytes are necessary for the working storage for file control. 
Note that the buffer length passed by [C] specifies the number 
of characters, so the actual length of buffer is [Ci x 2 + 9 
bytes. This buffer area can also be accessed without slot 
handling whenever the RS232C driver is called (including the 
timing when the interrupt from the receiver is generated). 


[HLJ—» 


I 9 bytes for File Control 


tCJ X 2 Bytes Receiver Buffer 


n 


i 

i 

i 


a 


304 









RS-232C SUPPORT 


3) Read Status (STAT) 
Entry: None 


Returns: 

IHL]= Status Data 


Modifies: 

None 


Description: 


Returns 

the status information and error code of the 

character 

3 ust 

read 

from the buffer (not the character just received). 

1 BIT NO 

. 1 Description 

- 1 

1 

|- 

_ 



1 

15 

1 Buffer over flow error 

i 

1 


1 0: No buffer over flow 

i 

1 


1 1: Buffer over flow 

i 

1 

14 

1 Time out error ( TMENBT ) 

i 

1 


1 0: No time out error occurred 

i 

1 


1: Time out error occurred 

i 

1 

13 

1 Framing error 

i 

1 


1 0: No framing error occurred 

i 

1 


1 1: Framing error occurred 

i 

1 

12 

1 Over run error 

i 

1 


1 0: No over run error occurred 

i 

1 


1 1: Over run error occurred 

i 

1 

11 

1 Parity error 

i 

1 


1 0: Character has no parity error 

i 

[ 


S 1: Character has parity error 

i 

1 

10 

i Control break key was pressed ( BRONBT ) 

i 

1 


1 0: Control-break was not pressed 

i 

1 


' 1: Control-break was pressed 

i 

1 

9 

1 Reserved 

i 

1 

8 

1 Reserved 

i 

1 

7 

1 Clear To Send 

i 

1 


1 0: False 

t 

1 


1 1: True 

i 

1 

6 

1 Timer/Counter Output-2 

i 

1 


1 0: Timer/Counter Output-2 negated 

i 

1 


1 1: Timer/Counter Output-2 asserted 

i 

1 

5 

1 Reserved 

i 

1 

4 

1 Reserved 

i 

1 

3 

1 Data Set Ready 

i 

1 


1 0: False 

i 

1 


1 1: True 

i 

1 

2 

1 Break Detect 

i 

1 


1 0: Not detected 

i 

I 


1 1: Detected 

i 

1 

1 

1 Ring Indicator 

i 

1 


1 0: False 

i 

i 


1 1: True 

i 

1 

0 

1 Carrier Detect 

i 

1 


1 0: False 

i 

t 


1 1: True 

i 




— j 


305 






RS-232C SUPPORT 


4) Get A Character Frcsn The Receive Buffer (GETCHR) 

Entry: None 

Returns: [A] = character received 

The sign flag is set if any error occurred. 

The carry flag is set if the character is an EOF code 
when the port is opened for input mode. 

Modifies: [F] 

Description: 

Gets a character from the receiver buffer. Returns backed 
up character if any. 


5) Send A Character To The RS-232C Port (SNDCHR) 

Entry: [A] = Character to send 

Returns: The carry flag is set if a control-break was entered. 

The zero flag is set if a time out error has 
occurred while waiting for XON or/and CTS signal. 
Modifies: CF 3 

Description: 

Sends the specified character to the RS-232C port. The 
character flow control by XON/OFF characters and/or the CTS 
(Clear To Send) line signal is handled if they had been 
initialized. A time out error will be generated if the 
specified time has elapsed while waiting for transmission 
permission, and the character will not be sent. 


6) Close The RS-232C Port (CLOSE) 

Entry: None 

Returns: The carry flag is set if an error occurs, 

Modifies: [AF] 

Description: 

Closes the RS232C port. The buffer is released, and a EOF 
code is sent if the port was opened for <output> mode. The RTS 
signal is placed in an inactive state. 


306 



RS-232C SUPPORT 


7) Check For The EOF Code (EOF) 

Entry: None 

Returns: [HL]= -1 , carry flag set, if next character is EOF. 

= 0, carry flag reset, if next character not EOF. 

Modifies: [AF] 

Description: 

Tests whether the next character is an EOF or not. Returns 0 
if the next character is not EOF. 


8) Returns The Number Of Characters In The Receive Buffer (LOC) 
Entry: None 

Returns: [HL] = Number of character in the receiver buffer. 

Modifies: [AF] 

Description: 

Returns the number of valid characters in the receive buffer. 
This value includes number of backed-up characters. The 
characters after the EOF code are ignored if the transmission 
was opened in the <input> mode; however, they will occupy space 
in the buffer. 


9) Returns Number Of Free Space In The Receive Buffer (LOF) 
Entry: None 

Returns: [HL]= number of free space 

Modifies: [AF] 

Description: 

Returns the number of free spaces for characters in the 
receiver buffer. 


10) Back Up A Character (BACKUP) 

Entry: [C3 = Character to back up 

Returns: None 
Modifies: E F] 

Description: 

Backs up a character in the special buffer. Last backed up 
character will be lost if any. 


307 



RS-232C SUPPORT 


11) Send Break Character (SNDBRK) 

Entry: [DE] = Number of break characters to send 

Returns: The carry flag is set if control break key was pressed. 

Modifies: [AF], [DE] 

Description: 

Transmits the specified number of break characters. Aborts 
if a Control-Break is entered during the transmission and 
returns with the carry flag set. 


12) Turn On/Off DTR Line (DTR) 

Entry: [A] = 0 to turn off 

[Al = Non-zero to turn on 
Returns: None 
Modifies: [F] 

Description: 

The DTR (Data terminal Ready) line is turned on when a power-on 
/reset initialize or an INIT routine is called. 


**************************************************** 

* NOTE * 

* * 

* Stack pointer must be located in PAGE-3 (higher * 

* address than OCOOOH). No registers except those * 

* described here should be changed. * 

**************************************************** 


308 



OTHER MSX EXTENDED BIOS CALLS 


4.2 Other MSX Extended BIOS Calls 

The extended BIOS call provides a way to access the extended 
device drivers via an additional HOOK entry. The device type is 
specified by register D, and the function of the call is specified 
by register E. To build a link of an extended BIOS call, each 
device driver should nest the Hook properly. 

The address of the Hook for the extended BIOS call is: OFFCAH. 
The flag bit which indicates whether the HOOK is valid or not 
is: LSB of 0FB20H. 

NOTE 

The stack pointer must be located in PAGE-3 (addresses 
higher than OCOOOH). No other registers except those 
described here should be changed. 


4.2.1 Extended BIOS Calls 


1) Broad Cast Command 

If the device number specified by register [D] is 0, this call 
should handle all extended device drivers added to the system. 


Build Device Name Table 


Number: 
Function: 
Entry: 


Exit: 

Description: 


0 

Build table which contains device number. 

IB] = Slot address of table entry for the device 
driver. 

[HL] = Points to table entry for the device driver 
[B] = Slot address of next table entry 

[HL] = Points to next table entry 

Using this call, the user is provided information on 
the type of device driver that must be installed in 
the system. To obtain detailed information, such as 
the slot number and the address to access driver, 
issue a call with the device number in [D] and the 
function number (which is zero) in [E]. 


' -—- 1 

[B];[HL]—41 Device number I 

i-—i 

I Reserved I 


IB] : [HL] 


returned* 




I 


J 


309 







OTHER MSX EXTENDED BIOS CALLS 


Return Number Of Trap Entries Used 


Number: 
Function: 
Entry: 

Exit: 

Description: 


I 

Adds number of traps used in device driver to [A]. 
[A] = Contains number of traps used by extended 
device driver so far. 

[A] = Number of traps updated 

There is a limited number (six) of flags for the 
event trap function. This call is provided to 
determine the flag to use with this device. 


Disable Interrupt 


Number: 
Function: 
Entry: 

Exit: 

Description: 


2 

Disables device driver interrupts. 

None 

None 

This function call is provided to inhibit 
interrupts. This feature is useful for improving 
the interrupt service response time or to inform 
the interrupt-drive routine that the DI instruction 
is going to issue. 


Enable Interrupt 


Number: 
Function: 
Entry: 

Exit: 

Description: 


3 

Enables device driver interrupts. 

None 

None 

This function call is provided to allow device 
drivers to generate interrupts. 


310 



OTHER MSX EXTENDED BIOS CALLS 


2) System Exclusive Extended BIOS Call 

This call is provided to allow the installation of special system 
software for proprietary use. The sole function specified follows. 
All other functions are not specified. 


Device number:255 


Number: 
Function: 

Entry: 

Exit: 

Description: 


0 

Builds a table containing the pointer to the BIOS 
functions and device information. 

CBl = Slot address of table entry for the device 
driver. 

[HL] = Points to table entry for this device driver. 
[B3 = Slot address of next table entry 

[HL3 = Points to next table entry 

The caller of the device driver can issue this 
function call to determine the slot number and the 
location of the jump table access the device driver. 


[Bl : [HLl 


r- —- 1 

[B]:[HL]^^l Slot address I 

l-—-1 

IJump table address (L) t 

t---t 

IJump table address (H) I 

h--4 

I Maker ID I 

4--^ 

I Reserved I 

I-H 

returned—»I I 


NOTE 

The Maker ID is assigned in response to 
requests. Manufacturers who provide unique 
Maker IDs must also provide the BIOS spe¬ 
cifications to the public. 


311 











OTHER MSX EXTENDED BIOS CALLS 


3) Summary of Extended BIOS Calls 


I ID] I 


Description 



1 

[E] 

l Broad cast 


1 

f- 

0 

I Build device name table 

I 0 

1 

1 

1 Return number of Trap Entries used 


i 

\ _ 

2 

1 Disable interrupt 


i 

- _ 

3 

1 Enable interrupt 


i 

[E 

1 RS-232C 

1 8 

i 

1- 

0 

1 Build a slot address table 


i 

- +— - 

1 

1 Return number of channels 


1 

1 — - 

[E] 

1 System exclusive 

1 255 

i 

0 

1 Build a slot address table 


312 
















OTHER MSX EXTENDED BIOS CALLS 


4.2.2 Extended BIOS Maker ID Number 

The Maker ID is assigned in response to requests, 
manufacturer not providing a Maker ID listed below 
provide the BIOS specification to the public. 


r— —- —-— 

1 ID code 

J---- 

1 

Name of manufacturer 

i 0 

1 

ASCII 

i 1 

1 

MICROSOFT 

I 2 

1 

CANON 

1 3 

1 

CASIO KEISANKI 

1 4 

1 

FUJITSU 

1 5 

1 

GENERAL 

1 6 

1 

HITACHI SEISAKUSYO 

1 7 

1 

KYOCERA 

1 8 

1 

MATSUSHITA DENKI 

I 9 

1 

MITSUBISHI DENKI 

1 10 

1 

NIHON DENKI 

1 11 

I 

NIHON GAKKISEIZOU 

1 12 

1 

NIHON VICTOR 

1 13 

1 

PHILLIPS 

1 14 

1 

PIONEER 

1 15 

I 

SANYO 

1 16 

1 

SHARP 

1 17 

1 

SONY 

1 18 

1 

SPECTRAVIDEO 

1 19 

1 

TOSHIBA 

1 20 * 

1 

1 

MITSUMI DENKI 





* Added on August 21, 1984 


A computer 
must also 


313 









TENKEY SUPPORT 


4.3 Tenkey Support on MSX 


The 

standard 

MSX 

uses nine 

rows of a 

key matrix, but 

two more rows 

(Y9 

and Y10) 

can 

be added 

to support 

an additional 

sixteen 

keys. 

The 

following 

is 

a list of 

the assignments of the additional 

keys. 


X7 

X6 

X5 

X4 

X3 X2 

XI 

XO 

Y 9 

4 

3 

2 

1 

0 Option 

Option 

Option 

Y10 

• 

$ 

- 

9 

8 7 

6 

5 


(Period) (Comma) (Minus) 


(The Option keys may be used for any purpose.) 


314 



PART D 

SOFTWARE DEVELOPMENT GUIDE 



INTERNATIONAL MSX VERSIONS 


5. International MSX Versions and their Differences 
5.1 Introduction 

At present, the MSX computer has the following versions. At a 
later time, it is possible that other versions will be released 
for other countries. 

Japanese 

USA 

International (abbreviated INT in this document) 

UK 

DIN 

French 

Korea 


5.2 Keyboard 

5.2.1 Keyboard Hardware 

The KANA key of the Japanese version toggles Kana mode and alpha 
mode, but the CODE key of international versions, while occupy 
ing the same position on the keyboard matrix, the keyboard input 
mode for the entry of the next key. Thus, the LED to indicate 
the CODE shift status is unnecessary. 

Three keys are pressed simultaneously in the Shift-Graph and 
Shift-Code modes. Using ordinary keyboard sense techniques, 
the SHIFT, GRAPH, and CODE shift keys must have a diode to 
prevent the loopback current that causes scanning conflicts. 


316 



INTERNATIONAL USX VERSIONS 


5.2.2 Character Set 

The USA, INT, UK, DIN, and French versions have a common 
international character set. 

o Character Code Table (International) 


01 23456789ABCDEF 



NOTE: The font of the character 'O' (zero) is different in DIN 

version. See figure. 

*** 

* * 

* * 

* * * 

* * 

* * 

*** 


317 








INTERNATIONAL MSX VERSIONS 


o Character Code Table (Japanese) 


01 23456789ABCDEF 



318 























































































INTERNATIONAL MSX VERSIONS 


5.2.3 Keyboard Layout 

See the figures in the next section. The USA and INT versions 
have the same keyboard. 

About USA, UK, INT versions: 

The keyboard diagrams show a dead-key to the left of the 
carriage return key, but this is probably not a good place 
for it, because it pushes the carriage return key too far to 
the right. Manufacturers may place this key another place, 
for example, the right of the right-hand shift key. 

About DIN, French versions : 

Manufacturers may move the less than and greater than keys 
(<, >) to the left of the left-hand shift key, but must also 
revise the keyboard hardware. 

5.2.4 CAPS Lock 

In the CAPS-lock mode, the uppercase of characters (having both 
a lowercase and an uppercase) is entered. In the CAPS-lock mode 
of the Japanese and French versions, when the shift key and an 
alphabet key are pressed, the lowercase letter is entered. When 
this is done in other (USA, UK, DIN, and INT) versions, an 
uppercase letter is entered. 

For the French version, see figure. The marked keys in the 
figure are shifted by the CAPS-lock. The CAPS-lock is not valid 
for the graphics and code characters. 

KANA characters in the Japanese version are valid when the KANA- 
Lock key is valid. Normally HIRAiGANA charcters are entered, and 
with the CAPS-Lock key together, KATAKANA characters are entered. 
Most of them are not affected by the SHIFT key. However, some 
of the KANA characters have both upper- and lowercase letters 
and are shifted by the SHIFT key. Notice the differences in the 
decoding charts. 


319 



INTERNATIONAL MSX VERSIONS 
o Layout International (USA) 



320 





INTERNATIONAL MSX VERSIONS 


o Decode International (USA) 


n 

N 

T 

0 

1 

CM 

3 

4 

5 

6 

7 


Normal 


0 

30 

1 1 

31 

2 

32 

3 

33 

4 

34 

5 

35 

6 

36 

7 

37 


Shift 

) 

29 

j 1 21 

«?• 40 

It 

23 

$ 

24 

~% 

25 

~ 5E 

& 

26 

c 

) 

Graph 


O 

09 

V* 

AC 

Vi 

AB 

% BA 

J? EF 

%o 

RD 

r 

F4 

r 

FR 

f 

Shift 

Q OA 


■ 2 

FD 

a 

FC 



j 

F5 



Code 


S KB 

L ]_ 

9F 

$ 

D9 

§ 

BF 

e 

9B 

y 

98 

a 

EO 

0 El 


Shift 

a 

D8 

i AD 

Pt 

9E 

r 

BE 

£ 

9C 

Y 

9D 




Normal 


8 

38 

9 

39 

- 

2D 

= 

3D 

\ 

5C 

L 

5B 

i 

5D 

; 3B 


Shift 

* 

2A 

1 ( 28 

_ 

5F 

t 2R 

; 7c 

1 7B 

M 7D 

: 3 A 

1 


Graph 



RC 

• 

07 

— 

17 

FI 

\ 

IE 

© 

01 

p 

0D 

♦ 

06 

1 


Shift 


D 

08 

-+- IF 

= 

F0 

1 16 

e 

02 

f) 

0E 

♦ 

04 


Code 


7 

E7 

c 

87 

* 

EE 

8 

E9 


4> 

ED 

(i) 

DA 

U 

B7 


Shift 

1' E2 

C 80 



0 

E8 

Q 

EA 

0 

B6 


Normal 


’ 27 

' 60 
_ 

L ^2C 

• 

2E 

/ 

2F 


a 

61 

b 

62 


Shift 

" 22 

■ 

7E 

< 

3C 

> 

3E 

7 

3F 


A 

41 

B 

42 

2 

) 

Graph 


4 

05 

RB 


F3 

£ 

F2 

/ 

ID 

' 

4J 

- 

C4 

_L 

11 

9 

Shift 

¥ 

03 

=s 

F7 

< 

AE 

) 

AF 

4- 

F6 

'O 

■ FE 



Code 


ij 

B9 

<7 

E5 

a 

86 

a 

A6 

0 

A 7 

- 

— TJ 

nr 

84 

u 

97 


Shift 

IJ 

B8 

X 

E4 

A 

8F 


t 

A8 

■■ 

A 

8E 

--— 


Normal 


c 63 

d 

64 

e 

65 

f 

66 

g 

67 

h 

68 

i 

69 

j 

6A 


Shift 

C 

43 

D 

44 

E 

45 

F 

46 

G 

47 

H 

48 

i 

49 

J 

4A 

3 

i 


Graph 


0 

RC 

d" C7 

▼ 

CD 

h 

14 

+ 15 

H 

13 

m 

DC 

1 C6 


Shift 

FA 

% 

Cl 

_ 

▲ 

CE 

■ 

D4 

1 10 

■ 

06 

■ 

DF 

|CA 


Code 


i 8D 

1 8B 

1 

8C 

6 

94 

ii 

81 

a 

B1 

i A1 

ae 

91 


Shift 




6 

99 

u 

9A 

A 

B0 


/E 

92 


Normal 


k 

6R 

1 6C 

m 

6D 

n 

6E 

() 

6F 

P 

70 

q 

71 

r 

72 


Shift 

K 

4B 

L 

4C 

M 

4D 

N 

4E 

0 

4F 

P 

50 

Q 

51 

R 52 

A 


Graph 


1 DU 

■ 

C8 


0B 

J 

IB 

■l 

C2 

m 

DB 

^CC 

r 

18 


Shift 

l DE 

| C9 

? 

DC 

■ 

D3 


C3 

a 

D7 

/,/ 

CB 

r 

A9 


Code 


i B3 

0 

B5 

ft 

E6 

it 

A4 

6 

A2 

u 

A3 

a 

83 

0 

93 


Shift 

] 

B2 

6 

B4 


N 

A5 


1] 

E3 




Normal 


s 

73 

t 

74 

11 

75! 

V 

76 

w 

77 

X 

78 

y 

79 

Z 

7A 


Shift 

S 53 

T 

54 

U 55 

V 

56 

w 

57 

X 

58 

Y 

59 

z 

5A 

CJ 

Graph 


H D2 

~r 

12 


CO 

L- 1A 

► CF 

X 

1C 

n 

19 


OF 

J 

Shift 

XD1 


■ 

C5 

■ 

D5 

i DO 

• 

F9 


\A 

o 

F8 




e 

89 

u 

96 T 

6 

82 

0 

95 

e 

88 

e 

8A 

a 

A0 

A 

85 




■1 

m 

131 





- -1 

_J 


321 





322 




































INTERNATIONAL MSX VERSIONS 


o Decode UK 


1 

U K 

( 

D 

1 

2 

3 

4 

5 

6 

7 


Normal 


0 

30 

1 

31 

2 

32 

3 

33 

4 

34 

5 

35 

6 

36 

7 

37 


Shift 

1 

29 

! 21 

(a- 

40 

P 

23 

$ 

24 

% 

25 

/v. 

5E 

& 

26 

0 

Graph 


rcr 

09 

1/ 

/i 

AC 

14 

AB 

K 

BA 

X} 

FF 

0/ 

/OO 

BD 

f 

F4 

r- 

FB 

Shift 

0 OA 


2 FD 

a 

FC 



J 

F5 



Code 


n 

EB 

f 

9F 

t 

D9 

§ 

BF 

i 

9B 

y 

98 

a EO 

3 El 


Shift 

£ 

D8 

i AD 

Ft 

9E 

qr 

BE 

£ 9C 

Y 

9D 




Normal 


8 

38 

9 

39 

- 

2D 

- 

3D 

\ 

5C 

j 

5B 

" 

5D 

; 3B 


Shift 

* 

2A 

( 28 

_ 

5F 

+ 

2B 

; 7C 

j 7B 

! 7D 

: 3A 

1 

Graph 



EC 

• 

07 

— 17 

i 

FI 

r\ 

IE 

© 01 

P 

OD 

♦ 

06 

1 

Shift 


n 

08 

-+- 

IF 

- 

FO 

16 

« 

02 

/ * 

OE 

♦ 

04 


Code 


7 F7 

d 87 

£ 

EF 

6 

E9 

- 

60 

<t> 

ED 

OJ 

DA 

it B7 


Shift 

T E2 

c 

80 




<t> 

E8 

2 EA 

U 

B6 


Normal 


' 27 

£ 

9C 

, 2C 

. 2E 

X 

2F 



a 

61 

b 

62 


Shift 

22 


7E 

< 

3C 

> 

3E 

V 

3F 



A 

41 

B 

42 

CM 

Graph 



05 


BB 


F3 


F2 

/ 

ID 



- 

C4 

_1_ 11 

Shift 


03 

- 

F7 

( AE 

$ 

AF 

A 

F6 


X 

1 

FE 



Code 


ij 

B9 

■•7 

E 5 

a 

86 

a 

A6 

0 

A7 

~ * 


a 84 

0 

97 


Shift 

u 

B8 

V 

E4 

A 8f 


i 

A8 

* ' 

A 

8E 



Normal 


c 

63 

cl 

64 

e 


f 

66 

g 

67 

h 

68 

i 69 

j 

6A 


Shift 

C 

43 

D 

44 

E 45 

F 

46 

G 

47 

H 48 

1 49 

J 

4A 

3 

Graph 


0 

BC 

J* C7 

▼ 

CD 

h 

14 

+ 

15 

-| 

13 

m 

DC 

S C6 

Shift 

- 

FA 

V Cl 

▲ 

CE 

■ 

D4 

4 

If) 

■ 

D6 

■ 

DF 

■ 

CA 


Code 


i 8D 

V 8B 

1 

8C 

ii 94 

ii 

81 

a B1 

f A1 

at- 91 


Shift 




0 

99 

u 

9A 

A 

BO 


JE 

92 


Normal 


1< 

6B 

1 

6C 

m 

6D 

n 

6E 

<) 

6F 

P 

70 

q 

71 

r 

72 


Shift 

K 

4B 

L 

4C 

M 

41) 

N 

4E 

0 

4F 

P 

50 

Q 51 

R 

52 

4 

Graph 


H DD 

■ 

C8 


0B 

J 

IB 

m 

C2 

T 

DB 


CC 

r 

18 

Shift 

| DF. 

| C9 

o. 

0C 

■ 

D3 

— 

C3 

& 

D7 

^CB 

r 

A9 


Code 


i B3 

6 

B5 

ft 

E6 

fi 

A4 

6 

A2 

u 

A3 

a 

83 

6 

93 


Shift 

1 

B2 

6 

B4 


N 

A5 


ii 

E3 




Normal 


s 73 

t 

74 

11 

75 

V 

76 

w 

77 

X 

78 

y 

79 

z 

7A 


Shift 

S 

53 

T 

54 

U 

55 

V 

56 

w 

57 

X 

58 

Y 

59 

z 

5A 

5 

Graph 


H D2 

~r 

12 

_ 

CO 

L 

1A 

^ CF 

X 

1C 

1 

19 

* 

OF 

Shift 

XD1 


■ 

C5 

■ 

D5 

i DO 

• 

F9 

n 

AA 

o 

F8 


Code 


e 

89 

V 

96 


82 

d 

95 

e 

88 

6 

8A 

ft 

AO 

a 

85 


Shift 



£ 

90 







323 






INTERNATIONAL MSX VERSIONS 


o Layout DIN 




324 





























INTERNATIONAL MSX VERSIONS 


o Decode DIN 


D 1 

N 

0 

1 

2 

3 

4 

5 

6 

7 


Normal 


0 

30 

1 

31 

2 

32 

3 

33 

4 


34 

5 

35 

6 

36 

7 

37 


Shift 

= 

3D 

' r 

21 

1 22 

§ 

BF 

$ 

24 

% 

25 

& 

26 

/ 

2F 

0 

Graph 


o 

09 

V\ AC 

A AB 

•X BA 

8 

EF 

%u 

BD 

r 

F4 

/ 

ID 

Shift 

0 OA 


2 

FD 

n 

FC 


:• F6 

j 

F5 

\ 

IE 


Code 


s 

EB 

7C 

@ 40 

€ 

EE 

C 

87 

e 

9B 

7 

E7 

\ 

5C 


Shift 

A 

D8 

, AD 

Pt 

9E 

<r 

BE 

C 

80 

£ 

9C 

r 

E2 



Normal 


8 

38 

9 

39 

P El 


dead 

key 

< 


3C 

u 81 

■+ 

2B 

d 94 


Shift 

( 

28 

) 

29 

*) 

3F 


> 

3E 

U 

9A 

* 

2A 

0 99 

1 

Graph 


EC 

• 

07 

!> 

0D 


60 

( 

AE 

© 01 

i. 

Fl 

4 

06 

1 

Shift 


B 

08 

fl 

OE 

* 

27 

1 


AF 


02 

-+- 

IF 

♦ 

04 


Code 


[ 

5B 

1 5D 

8 

E9 

- 

"3 >> 


F3 

0 

ED 

Cl) 

DA 

ii 

B7 


Shift 

1 7B 

1 7D 

i. 

A8 


O V* 


F2 

4> 

E8 

Q 

EA 

0 

B6 


Normal 


a 

84 

* 

23 

, 2C 

. 2E 

- 

- 

2D 


a 

61 

b 

62 


Shift 

A 8E 

y\ 

5E 


: 3A 

. 

. 

5F 


A 

41 

B 

42 

2 

Graph 


+ 

05 


7E 

y 

FB 

1 16 

- 

- 

17 


- 

C4 

- 1 - 11 

Shift 

V 

03 

— 

BB 

~ 

F7 


= 

= 

F0 


1 

FE 



Code 


ij 

B9 

a 

E5 

a 

86 

a 

A6 

0 

A7 


a 

E0 

O 

97 


Shift 

U 

B8 


E4 

A 

8F 







Normal 


c 

63 

d 

64 

e 

65 

f 

66 

R 

67 

h 

68 

i 69 

j 

6A 


Shift 

C 

43 

D 

44 

E 

45 

F 

46 

G 

47 

H 

48 

I 

49 

J 

4A 

3 

Graph 


0 

BC 

■" C7 

▼ 

CD 

h 

14 

+ 

15 

-{ 

13 

m 

DC 

| C6 

Shift 

- 

FA 

SCI 

▲ 

CE 

■ 

D4 

- 


10 

m 

D6 

■ 

DF 

|CA 


Code 


i 8D 

I 8B 

1 

8C 

/ 

9F 

y 

98 

a B1 

1 

A1 

ae 

91 


Shift 






A 

B0 


JE 

92 




a 

6B 


E3 


D 


m 




q 

71 

r 

72 

1 




B 

m 

M 

4D 

N 

4E 

m 




Q 

51 

R 

52 





ii 


El 

KB 


D1 




^CC 

r 

18 

psiiii 

mm 

| C9 

* 

0C 

B 

D3 

E 





CB 

r 

A9 




D 

B3 


B5 


E6 

n 

A4 

1 

1 




a 

83 

6 

93 



H 


m 

KB 


El 

K3l 









m 


■a 

I 

u 

75 

V 

76 






m 

a 

El 


Shift 

s 

53 

T 

54 

m 


□ 


KP 





5A 

Y 

59 





B 


IH 


II 





i 

19 

<5- 

OF 



El 


§.ggi 

L 




F9 

"l 


m 

EB 


Code 


e 

89 

0 

96 

6 

82 

d 

95 

6 

88 

<5 

8A 

a 

A0 

a 

85 


Shift 



E 

90 





¥ 

9D 


325 




















INTERNATIONAL MSX VERSIONS 


o Layout French 



326 








INTERNATIONAL MSX VERSIONS 


o Decode French 


1 

= R 

0 

1 

2 

3 

4 

5 

6 

7 




a 

85 

& 

26 

e. 

82 

1 22 

' 27 

( 

28 

§ 

BF 

e 

8A 


Normal 

Shift 

0 

30 

1 

31 

2 

32 

3 

33 

4 

34 

5 

35 

6 

36 

7 

37 

0 



O 09 

£ 

AC 

34 AB 

M BA 

— 

BB 

7 

EF 

f 

F'4 


FB 

Graph 

Shift 

Q 0A 

! 16 

2 

ED 

n 

FC 


F7 


J 

F5 



Code 


8 

EB 

7C 

8 40 

a 

E0 

60 

1 7B 

A 

5E 

€ 

EE 


Shift 

a 

D8 

i AD 

E 

90 

pt 

9E 


r 

5B 

IT 

BE 

- 

7E 


Normal 


' 21 

C 

87 

) 

29 

- 

2D 

< 

3C 

* 

$ 

24 

m 

6D 


Shift 

8 

38 

9 

39 

o 

F8 

_ 

5E 

> 

3E 


* 

2A 

M 

4D 


Graph 


CO 

EC 

♦ 

07 

© 

01 

— 

17 

< 

AE 


fL 

> 

0D 

4 

06 

1 

Shift 


B 

08 


02 

-+- IF 

> 

AF 

* ’ rt 

Qj 

fl 

0E 

♦ 

04 


Code 


7 

E7 

8 

E9 

I 7D 

0 

ED 

< 

F3 



e 9B 

U 

R7 


Shift 

i 

E2 

c 

80 

] 

5D 

<1> 

E8 


F2 



0 

B6 


Normal 


a 

97 

ft 

23 

; 3B 

: 3A 

rr 

3D 


Q 

71 

b 

62 


Shift 

% 25 

£ 

9C 

. 2E 

/ 

2F 

F 

2B 


Q 

51 

B 

42 

2 

Graph 


4 

05 

%o 

BD 

-r 

F6 

\ 

IE 

£ 

FI 


- 

C4 

_L 

11 

Shift 

¥ 

03 



/ 

ID 

EE 

F0 


| FE 



Code 


ij 

B9 

a 

E5 

a 

86 

a 

A6 

o 

A7 


a 84 

0 El 


Shift 

U 

B8 

X E4 

A 

8F 

\ 

5C 



A 

8E 



Normal 


c 

63 

d 

64 

C 

65 

f 

66 

g 

67 

h 

68 

i 69 

j 

6A 


Shift 

c 

43 

D 

44 

E 

45 

F 

46 

G 47 

H 

48 

I 

49 

J 

4A 

3 

Graph 


0 

BC 

^ C7 

▼ 

CD 

|- 14 


15 


13 

m 

DC^ 

1 C6 

Shift 

- 

FA 

h 

Cl 

▲ 

CE 

■ 

D4 

4 

■ 

D6 

m 

DF 

|CA 


Code 


i 8D 

V 8B 

l 

8C 

6 

94 

ii 

81 

a 

B1 

i A1 

ae 

91 


Shift 




O 99 

u 

9A 

A 

B0 


JE 

92 


Normal 


k 

6B 

1 

6C 

, 2C 

n 

6E 

0 

6F 

P 

70 

a 

61 

r 

72 


Shift 

K 

4B 

L 

4C 

7 

3F 

N 

4E 

0 

4F 

P 

50 

A 

41 

R 

52 

4 

Graph 


| DD 

■ 

C8 


0B 

J 

IB 

■ C2 

1 

\\ 

\\ 

CC 


18 

Shift 

| DE 

1 |C9 

■? 

OC 

■ 

D3 

“ C3 

5 

X^CB 

r 

A9 


Code 


T 

B3 

0 

B5 

u 

E6 

n 

A4 

6 

A2 

Q 

A3 

a 

83 

a 

93 


Shift 

T 

B2 

0 

B4 

i 

A8 

N 

A5 


n 

E3 




Normal 


S 

73 

t 

74 

U 

75 

V 

76 

z 

7A 

X. 

78 

y 

79 

W 

77 


Shift 

S 53 

T 

54 

u 

55 

V 

56 

z 

5A 

X 

58 

Y 

59 

w 

57 

c 

Graph 


N D2 

"T 

12 


CO 

L 1A 

► CF 

X 

1C 


19 

1* 

OF 

O 

Shift 

Xdi 

t 

D9 

■ 

C5 

■ 

D5 

4 DO 

• 

F9 

n 

AA 



Code 


e 

89 

11 

96 

y 

98 

6 

95 

e 

88 

/ 

9F 

a 

A0 

Cl) 

DA 


Shift 







¥ 

9D 

a 

EA 


327 



INTERNATIONAL MSX VERSIONS 


o Layout Japanese 



328 









INTERNATIONAL MSX VERSIONS 


o Decode Japanese 1 


J 

1 S 

o! i 

2 

3 

4 

5 

6 

7 


Normal 


0 

30 

1 

31 

2 

32 

3 

33 

4 

34 

'0 

35 

6 

36 

7 

37 


Shift 


! 21 


22 

# 

23 

$ 

24 

% 

25 

& 

26 

' 27 

0 

Graph 


7j 

OF 

n 

07 

H 

01 

k 

02 

7K 

03 

X 

04 

<17 

05 

± 

06 


Kana 


h 

FC 

4h( 

E7 

ec 

*> 91 

’) 

93 


94 

4-J 

95 

A* 

FI 


Caps 

V 

DC 

X 

C7 


CC 

T 

B1 


B3 

-r 

B4 

t 

B5 

Y 

D4 


Normal 


8 

38 

9 

39 

2D 


5E 

¥ 

5C 


40 

c 

5B 

; 3B 

_ 

Shift 

( 

28 

) 29 

3D 

~ 

7E 

, 7C 

' 60 

! 7B 

1 2B 

1 

Graph 


TX 

0D 

■ ; F 

E0 

— 

17 


l'J 

09 


o 

84 

4 

82 


Kana 



F5 

J: 

F6 

:.i ee 

-'N. 

ED 

— 

B0 

- 

DE 

" 

DF 

ft 

FA 


Caps 

-X 

D5 

y D6 

IT 

CE 

CD 

- BO 

DE 

• 

DF 

F 

DA 


Normal 


: 3A 

J 5D 

, 2C 

2E 

_ 

2F 


a 

61 

b 

62 


Shift 

* 

2 A 

1 7D 

< 

3C 

'> 

3E 

7 3F 

— 

5F 

A 

41 

B 

42 

CM 

Graph 



81 

• 

85 

>V 

IF 

k 

ID 

* 

80 

♦ 

83 


J 

IB 


Kana 


D 99 

is 

FI 

^ nL 

E8 

h 

F9 

i O 

F2 

h 

FB 

G 

El 

- 

9A 


Caps 

y 

B9 


D1 

F 

C8 


D9 


D2 

n 

DB 

-f 

Cl 

17 

BA 


Normal 


C 

63 

d 

64 

e 

65 

B 


B 


B 

68 


j 

6A 


Shift 

c 

43 

D 

44 

E 

45 

F 

46 

G 

47 

II 

48 

B 


J 

4A 

3 

Graph 


1 1A 

U 

14 

- 

18 

+ 15 

—1 

13 


0A 


16 



Kana 


* 

9F 

1 

9C 

I''* 

92 


B 


\ 

98 


E6 

i 

EF 


Caps 

V 

BF 


BC 

4 

B2 

^ CA 

jf 

B7 

7 

B8 

— 

C6 


CF 


Normal 


k 

613 

1 

6C 

m 

6D 

n 

6E 

0 

6F 

P 

70 

q 

71 

r 

72 


Shift 

K 

4T3 

I. 

4C 

M 

ID 

N 

4E 

0 

4F 

P 

50 

Q 

51 

R 

52 

4 

Graph 



+ 

IE 

OB 



7 7 

10 


i 12 


Kana 


<r> 

E9 

0 

F8 

i 

F3 


F0 

7-5 

F7 

At 

9E 

k 

E0 


9D 


Caps 

/ 

C9 

0 

D8 

-V- 

D3 

1 

DO 

7 D7 


BE 

7 

CO 

A 

BD 


Normal 


s 73 

t 

74 

U 

75 

v 76 

w 

77 

X 

78 

y 

79 

z 

7A 


Shift 

S 53 

T 

54 

u 

55 

V 56 

w 

57 

X 

58 

Y 

59 

z 

5 A 

5 

Graph 



OC 

- 

19 


1 11 


X 

1C 

¥ 

08 



Kana 


> 

E4 


96 

£ 

E5 


EB 

-r 1 

k. 

E3 

£ 

9B 


FD 

-o 

E2 


Caps 

I- C4 

t) 

B6 

i- 

C5 


CB 

T 

C3 


BB 

> 

DD 

•y 

C2 


329 







INTERNATIONAL MSX VERSIONS 
o Decode Japanese 2 






INTERNATIONAL MSX VERSIONS 


5.2.5 DEAD-KEY Functions 

When an "a", "e", "i", "o", "u n , or "y" key is entered after the 
SHIFT, GRAPHICS, CODE, or DEAD keys are entered, the accented 
character is entered instead. The dead-key is valid only for 
the "a", "e", "i", "o", "u", "y", and SPACE keys. 

If a designated character does not exist in the character set, a 
normal (non-accented) character is entered. For example, when 
the dead key and a "Y" key of the international keyboard are 
pressed, an accent grave "y" is not entered, and a normal "y" is 
entered. 

The dead-key is an optional provision. The dead-key is less 
useful in the French and German versions, where special 
keyboards must be used, and in English-speaking countries. 
Application programs that must use this dead-key are less 
compatible with other versions. 


USA, UK, INT Versions 
I Mode I Function 


1 Normal 


[Accent 

grave 

(') 1 

1 Normal 

shift 1 Accent 

egu 

(*) I 

(Graph 


1Accent 

grave 

(') 1 

1— 

1 Graph 

shift 

[Accent 

egu 

(•) i 

ICode 


[Accent 

circonflex 

r> i 

r 

ICode shift 

1 “ 

1 Umlaut 


( ) i 


331 











INTERNATIONAL MSX VERSIONS 


DIN version 


! Mode 

j—_ _ _ 

---- 

1 Function 

} 


1 Normal 
|—-. 

(Accent grave 

rV\ 


(Normal shift 
|- 

.(Accent egu 

(') 1 


iGraph 

1 Accent grave 

-( 

D 1 

*See Note 1. 

1 Graph shift 

(Accent egu 


*See Note 1. 

1 Code 

lAccent circonflex 

r> i 


iCode shift 

1Umlaut 

(Ti 



*Note I: In the DIN version, when the SHIFT, GRAPH, or 
are pressed, an accent sign without a letter 

French version 

r— — ——t i 

I Mode I function I 


H-^ 


1 Normal 

lAccent 

circonflex 

r> i 

1 Normal shift 1 Umlaut 


n; 

IGraph 

\ — _ 

lAccent 

circonflex 

C) t 

IGraph shift 
|-- - 

1 Umlaut 


( ) i 

1 Code 

lAccent 

circonflex 

r> i 

ICode shift 

1 Umlaut 


TTi 


4 


DEAD keys 
is entered. 


332 



















INTERNATIONAL MSX VERSIONS 


In the DIN and French versions, when the SPACE key is pressed 
either the SHIFT, GRAPH, CODE, or DEAD keys are pressed, an 
accent sign without alphabet is entered as follows. 


r i-—->-—-, 

I Mode I DIN I French I 

i-1-1-1 

(Normal lAccent grave (')lAccent circonflex I 

*“ --H—-H-^ 

iNormal shiftlAccent egu {') I Space I 

I h—-1-1 

(Graph ((*See Note 1.) lAccent circonflex ( A )I 

h — —— — — - - -- ______ ___________ ^ 

(Graph shift ( (*See Note 1.) iSpace I 

I--h-H-1 

(Code lAccent circonflex (^) lAccent circonflex (*) I 

I-H-H-—-H 

ICodeshift ISpace ISpace I 


5.3 Screen Mode 

The vertical synchronize frequencies and the default screen 
modes of the different versions are as follows. 


I I iDefaultiDefaultlDefault screen width 

I Version IV. Sync. I screen Iborder - --i- 

I I I mode I col or I SCREEN 0 I SCREEN 1 



I Japan I 

L- H 

IDSA I 

V -+- 

IUK I 

h - H 

I DIN I 

f--^ 

I French I 

l--+ 

IINT I 


I 1 I 7 I 

6 0Hz h-H-H 

I I I 


50 Hz 


39 


37 


333 






















INTERNATIONAL MSX VERSIONS 


5.4 Other Differences among Versions 

The default function for the F6 key differs as follows. 

r ---r~ —— —--—--j 

I Japanese I color 15,4,7 1 

i-——i-1 

lOthers Icolor 15,4,41 


The Japanese version has a Hiragana-to-Katakana converter for 
non-MSX printers; however, other versions do not have this 
feature. 

The format symbols for the PRINT USING statement that differ 
among international versions are as follows. 


I Purpose (Japanese I UK I Others I 

t™ ————_ —— -~-1-1 -— — — H -1 

I Currency sign I Yen ¥ I Pound £ I $ I 

i — —-—-1--I-1-1 

I Fixed-length string field I & I \ I 

i — i-+-t 

IVariable-length string fieldl @1 & I 


The VDP interrupt interval is equal to the vertical synchronize 
frequency, or 1/60 second in the Japanese and USA versions, and 
1/50 second in other versions. This has an effect on the 
interval to increment the TIME variable. 

The symbol for integer division is the Yen sign in the Japanese 
version and in all other versions. 

The format of DATE used for MSX-DOS is 'yy-mm-dd' (Year, Month, 
Date) in Japanese version, 'mm-dd-yy 1 in USA version and 'dd-mm- 
yy' in European versions. 


334 










INTERNATIONAL MSX VERSIONS 


5.5 ID Bytes 

You can build software having compatibility with all MSX 
versions by using the following information supplied in the 
system ROM. 

The format of the ID bytes are as follows: 

2BH: B7 B6 B5 B4 B3 B2 B1 BO 

1 I I I I I I I 

I I I I <—x— j—T ype of character generator 

j!l! 0: Japanese 1: International 

I'll 2: Korean 

1111 

| i— j.— j-Date format 

[ 0: Y-K-D 1: M-D-Y 2: D-M-Y 

' Interrupt frequency 

0: 60Hz Is 50Hz 

2CH: B7 B6 B5 B4 B3 B2 B1 BO 

I I I I I I I I 

| | | | i—j— j—T ype of keyboard 

j I I I 0: Japanese 1: International 

i I I I 2: French 3: UK 4: DIN 

L — JJ — J -Version of BASIC 

0: Japanese 1: International 


335 












NOTES FOR MSX SOFTWARE DEVELOPERS 


6. Notes for MSX Software Developers 

1) Do not write programs to directly handle the hardware. Use 
routines prepared in BIOS so as to isolate the software from 
the hardware and make future changes to the hardware without 
affecting the existing software possible. The BIOS is built to 
access its functions via a jump table beginning at address 0000. 
The jump table contains jump vectors functions that handle the 
hardware of the MSX computer. By using the functions provided 
by BIOS, application programs can access the MSX hardware 
without modification, even though the hardware is different. 

Fot example, the current MSX scans the keyboard by using 8255 
PPI. In the near future, however, there may be computers 
having separate keyboards using an infrared communication link. 
This new computer may not use the 8255 PPI; it might use some 
other chip to do serial communications to handle the keyboard. 
If the software scanning the keyboard uses the 8255 directly, 
the new computer would not support the software. 

The only exception to the above rule is the VDP. To allow fast 
data transfer with the VDP, the ROM contains the locatios of 
the VDP in addresses 0006 and 0007. Address 0006 contains the 
read address of the VDP and address 0007 contains the write 
address to the VDP. If the software needs to transfer data at 
a high speed, the program can access the VDP directly using 
these addresses contained in ROM with the indirect addressing 
mode. 

In addition, address 0004 contains the address of the character 
pattern generator table stored in ROM. This may be of use to 
some programs that must keep track of the location of the table. 


2) Do not use RAM locations above F380H if you do not have 
detailed documentation on the meanings of these locaations. 
This area is used by the system for working storage and access 
to these locations may cause your program to malfunction or to 
be incompatible with versions released in the future. All 
locations that are unused in the current MSX version within the 
above area are reseved for future expansion. 


336 



NOTES FOR MSX SOFTWARE DEVELOPERS 


3) Software that has to interact with other programs must be 
designed in a way that it does not alter the programming 
environment. Major considerations are as follows. 

o Allocate work space 
o Share HOOKs 


4) There are differences among versions of MSX sold in different 
countries. These differences have been restricted to the 
keyboard layout and the character generators. The locations 
2BH and 2CH contain the special ID bytes that indicate the 
characteristics of the ROM. Software should be written to refer 
to these locations so as to work on any international version. 
See section 5.5 ’ID bytes’ for details. 


5) Programs distributed in ROM cartridges must run in any slot/ 
primary or secondary. Some of the game software that have been 
developped can run only in slot 1, or only in non-expanded slot. 
This DOES cause a big problem. 

Programs which use the MSX-BASIC interpreter with system CALL 
statements or device expansion mechanisms, must also determine 
the number of the slot in which the cartridge is inserted. 

Programs which run independently from the MSX-BASIC interpreter 
(such as game programs) do not have to determine the location 
of the cartridge unless they use the CALSLT routine, the CALBAS 
routine, or the 1 RST 30H'; or if the program occupies more than 
one page (for example the first 16K in 4000H..7FFFH, or the 
second 16K in 8000H....OBFFFH). This is because slot exchanges 
are not done during program execution. For example, if you 
want to call a routine in your program from an interrupt hook, 
simply do a 'JP' instruction, not 'RST 30H’, because your 
routine will always be there. 


337 



NOTES FOR MSX SOFTWARE DEVELOPERS 


| 

Use the following routine to know where you are: ; 


; This routine returns the slot address in the following format 
i in [Acc]. 


FxxxSSPP 
I Mil 

I I I — Primary slot # (0-3) 

I tJ -Secondary slot # (0-3) 

1 -1 if secondary slot # specified 

This value can later be used as an input parameter for the 
RDSLT, WRSLT, CALSLT, ENASLT and ' RST 3 OH'. 


RSLREG 

EQU 

138H 


EXPTBL 

EQU 

0FCC1H 


B8000 

EQU 

0 

;Set this to non-zero if the program 
; resides at 8000..0BFFFH 

WHERE_AH_I: 




CALL 

RRC 

RRC 

RSLREG 

;Read primary slot # 

;Move it to bit 0,1 of [Acc] 

IF 

B8000 

RRC 

RRC 



ENDIF 

ANI 

11B 



MOV 

C, A 



MVI 

B,0 



LXI 

H,EXPTBL 

;See if this slot is expanded or not 


DAD 

B 


ORA 

M 

;Set MSB if so 


RP 


;Not expanded, all done 


MOV 

C, A 

;Save primary slot number 


INX 

H 

jPoint to SLTTBL entry 


INX 

H 


INX 

H 



INX 

H 


IF 

MOV 

B8000 

A, M 

;Get what is currently output to 

; expansion slot register 


RRC 


;Move it to bit 2,3 of [Acc] 


RRC 



ENDIF 

ANI 

1100B 



ORA 

C 

;Finally form slot address 


RET 



338 







NOTES FOR MSX SOFTWARE DEVELOPERS 


• m • • 




If your program occupies 32K from 4000H..OBFFFH, and 
the execution begins from the INIT entry of the ROM 
at 4000H..7FFFH, use the following routine to enable the 
last half: 


trtritttftttffirsrititittr 


trttttfti 


9 9 9 9 9 9 






ENASLT EQU 

24H 

CALL 

WHERE_AM_I 

MV I 

H, 80H 

CALL 

ENASLT 


6) When changing the contents of register 0 or 1 of the VDP to 
change the display modes, do not write immediate values to them. 
Their current contents are always stored in RGOSAV and RG1SAV, 
respectively, so get their contents first, then mask off the 
unnecessary bits and add your own bits by using AND and OR 
instructions. Leave the other bits unchanged. This is necessary 
because some manufacturers use the EV (External Video) bits to 
allow superimposing. 


7) When writing values to the various base address registers of 
the VDP, always write 0's to the unused bits near the MSB. This 
is important because it makes it possible to expand the 
capabilities of the VDP while maintaining compatibility with 
the current 9918-compatible VDP. 


8) BIOS provides two ways to read the keyboard. Use the routines 
depending ori to your needs. 

1. Physical key position and real-time keyboard status as 
returned value needed. 

Use SNSMAT entry 

2. Logical character code needed as a returned value. 

Use CHSNS and CHGET 


339